我正在为PHP应用程序编写RESTful API模块,我对动词HEAD
和OPTIONS
有点混淆。
OPTIONS
用于检索给定资源的可用HTTP动词?HEAD
用于确定给定资源是否可用?
如果有人能澄清*这些动词,我将不胜感激。
*澄清是关于重新利用HTTP动词的RESTful API架构。从那以后,我意识到HEAD
和OPTIONS
都不应该重新使用 ,而应该像任何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
头strong>
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报头,但没有正文。这让客户端确定缓存信息,将返回什么内容类型,将返回什么状态码。可用性只是其中的一小部分。