RESTful API方法;头,选项


RESTful API methods; HEAD & OPTIONS

我正在为PHP应用程序编写RESTful API模块,我对动词HEADOPTIONS有点混淆。

  • OPTIONS 用于检索给定资源的可用HTTP动词?
  • HEAD用于确定给定资源是否可用?

如果有人能澄清*这些动词,我将不胜感激。

*澄清是关于重新利用HTTP动词的RESTful API架构。从那以后,我意识到HEADOPTIONS都不应该重新使用 ,而应该像任何HTTP应用程序一样表现得可预测。哦,我们在这两年里成长了多少。

OPTIONS方法返回关于API的信息(方法/内容类型)

HEAD方法返回资源的信息(版本/长度/类型)

服务器响应选项>

HTTP/1.1 200 OK
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Type: text/html; charset=UTF-8
Date: Wed, 08 May 2013 10:24:43 GMT
Content-Length: 0

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: text/html; charset=UTF-8
Date: Wed, 08 May 2013 10:12:29 GMT
ETag: "780602-4f6-4db31b2978ec0"
Last-Modified: Thu, 25 Apr 2013 16:13:23 GMT
Content-Length: 1270
  • OPTIONS识别资源支持哪些HTTP方法,例如,我们可以删除它或通过PUT更新它吗?
  • HEAD查看资源是否变更。这在维护资源的缓存版本
  • 时非常有用。
  • HEAD在进行可能代价高昂的检索之前,检索有关资源的元数据,例如其媒体类型或大小
  • HEAD, OPTIONS测试资源是否存在,是否可访问。例如,在应用程序
  • 中验证用户提交的链接

这是一篇关于HEAD和OPTIONS如何适应RESTful架构的简明文章。

根据:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

<

9.2选项/strong>

OPTIONS方法表示对由request - uri标识的请求/响应链上可用的通信选项信息的请求。此方法允许客户端确定与资源或服务器功能相关的选项和/或需求,而无需暗示资源操作或启动资源检索。

这个方法的响应是不可缓存的。

如果OPTIONS请求包含实体(由Content-Length或Transfer-Encoding表示),则媒体类型必须由Content-Type字段表示。虽然本规范没有定义这种体的任何用途,但HTTP的未来扩展可能会使用OPTIONS体在服务器上进行更详细的查询。不支持此扩展的服务器可能会丢弃请求正文。

如果request - uri是一个星号("*"),则OPTIONS请求一般应用于服务器,而不是特定的资源。由于服务器的通信选项通常取决于资源,因此";*""请求仅作为"ping"有用。或";no-op"方法类型;除了允许客户机测试服务器的功能之外,它什么也不做。例如,这可以用来测试代理是否符合HTTP/1.1。

如果请求uri不是星号,则OPTIONS请求仅应用于与该资源通信时可用的选项。

一个200响应应该包含任何头字段,表示服务器实现的可选功能,并适用于该资源(例如,允许),可能包括本规范未定义的扩展。响应体(如果有的话)也应该包含有关通信选项的信息。这种正文的格式没有在本规范中定义,但可能会在HTTP的未来扩展中定义。内容协商可用于选择适当的响应格式。如果不包含响应体,则响应必须包含一个字段值为"0"的Content-Length字段。

max - forwarded request-header字段可以用于在请求链中针对特定的代理。当代理接收到一个允许转发请求的绝对uri上的OPTIONS请求时,代理必须检查Max-Forwards字段。如果Max-Forwards字段值为零("0"),代理绝对不能转发消息;相反,代理应该使用自己的通信选项进行响应。如果Max-Forwards字段值是一个大于零的整数,代理在转发请求时必须减少字段值。如果请求中没有Max-Forwards字段,那么转发的请求绝对不能包含Max-Forwards字段。

<

9.4头/strong>

HEAD方法与GET方法相同,除了服务器不能在响应中返回消息体。响应HEAD请求的HTTP报头中包含的元信息应该与响应GET请求时发送的信息相同。该方法可用于获取请求所隐含的实体的元信息,而无需传输实体本体本身。此方法通常用于测试超文本链接的有效性、可访问性和最近的修改。

HEAD请求的响应可能是可缓存的,这意味着响应中包含的信息可能用于从该资源更新先前缓存的实体。如果新的字段值表明缓存的实体与当前实体不同(如Content-Length, Content-MD5, ETag或Last-Modified的变化),则缓存必须将缓存条目视为过期。

OPTIONS告诉您诸如"此资源允许使用哪些方法"之类的内容。

HEAD获取get请求时得到的HTTP报头,但没有正文。这让客户端确定缓存信息,将返回什么内容类型,将返回什么状态码。可用性只是其中的一小部分。