RESTful API方法; HEAD& OPTIONS

时间:2011-07-12 05:53:25

标签: php api http rest

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

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

如果有人能澄清*这些动词,那将非常感激。

*澄清了RESTful API架构重用HTTP动词。我已经意识到HEADOPTIONS应该被重新定位,而是像任何HTTP应用程序那样可预测。哦,我们如何在两年内成长。

3 个答案:

答案 0 :(得分:43)

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

  

9.2选项

     

OPTIONS方法表示请求获取有关Request-URI标识的请求/响应链上可用的通信选项的信息。此方法允许客户端确定与资源相关的选项和/或要求,或服务器的功能,而不会暗示资源操作或启动资源检索。

     

对此方法的响应不可缓存。

     

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

     

如果Request-URI是星号(“*”),则OPTIONS请求通常应用于服务器而不是特定资源。由于服务器的通信选项通常取决于资源,因此“*”请求仅用作“ping”或“no-op”类型的方法;除了允许客户端测试服务器的功能之外,它什么都不做。例如,这可用于测试代理是否符合HTTP / 1.1(或缺少)。

     

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

     

200响应应该包括任何标题字段,这些标题字段指示服务器实现并适用于该资源的可选功能(例如,允许),可能包括未由此规范定义的扩展。响应机构(如果有的话)应该还包括有关通信选项的信息。此规范未定义此类主体的格式,但可能由未来的HTTP扩展定义。内容协商可用于选择适当的响应格式。如果不包含响应主体,则响应必须包含字段值为“0”的Content-Length字段。

     

Max-Forwards请求标头字段可用于定位请求链中的特定代理。当代理收到允许请求转发的absoluteURI上的OPTIONS请求时,代理必须检查Max-Forwards字段。如果Max-Forwards字段值为零(“0”),则代理不得转发该消息;相反,代理应该响应自己的通信选项。如果Max-Forwards字段值是大于零的整数,则代理必须在转发请求时递减字段值。如果请求中不存在Max-Forwards字段,则转发的请求不得包含Max-Forwards字段。

     

9.4 HEAD

     

HEAD方法与GET相同,只是服务器不能在响应中返回消息体。响应HEAD请求的HTTP头中包含的元信息应该与响应GET请求时发送的信息相同。该方法可用于获得关于请求所暗示的实体的元信息,而无需转移实体主体本身。此方法通常用于测试超文本链接的有效性,可访问性和最近的修改。

     

对HEAD请求的响应可以是可缓存的,因为响应中包含的信息可用于从该资源更新先前缓存的实体。如果新字段值指示缓存的实体与当前实体不同(如Content-Length,Content-MD5,ETag或Last-Modified中的更改所示),则缓存必须将缓存条目视为陈旧。

答案 1 :(得分:35)

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

<强> HEAD

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测试资源是否存在且可访问。例如,验证应用程序中用户提交的链接
  •   

Here是关于HEAD和OPTIONS如何适应RESTful架构的简洁文章。

答案 2 :(得分:22)

OPTIONS会告诉您诸如“此资源允许哪些方法”之类的内容。

HEAD获取您在发出GET请求时获得的HTTP标头,但没有正文。这使客户端可以确定缓存信息,返回的内容类型,返回的状态代码。可用性只是其中的一小部分。