如何响应HTTP OPTIONS请求?

时间:2012-08-13 00:22:18

标签: http

HTTP OPTIONS方法应该用于确定服务器在给定资源上支持的其他方法。鉴于此,我有两个问题:

  • 这种反应是什么样的?我在PublicAllow甚至Access-Control-Allow-Methods标题中看到了包含CSV列表的示例。他们都需要吗?有什么不同? RFC 2616在这里似乎没什么帮助。

  • 使用它来列出资源在非REST-API环境中支持的操作是否合适?例如,如果我的ConversionController支持动作convert,那么这样的回复是否有意义:

请求:

OPTIONS /conversion HTTP/1.1

响应:

HTTP/1.1 200 OK
...
Allow: CONVERT
...

3 个答案:

答案 0 :(得分:17)

RFC 2616定义“允许”(http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.14.7)。 “公共”已不再使用。 “访问控制允许方法”在CORS规范中定义(参见http://www.w3.org/TR/cors/)。

答案 1 :(得分:7)

回应标题:"如何回应HTTP OPTIONS请求?"要回答这个问题,我想知道您为什么要回复OPTIONS请求?谁/什么向您发送OPTIONS请求,为什么? Many public servers respond with some form of "error" or "not allowed"(500,501,405)。因此,除非您处于特定情况,即您的客户将合理地发送OPTIONS请求并期望返回有用/有意义的信息(例如,WebDAV,CORS),您可能希望回复:" don&#39这样做。"

关于" OPTIONS /转换HTTP / 1.1"的问题。请求:除非您知道您服务器的某个客户端,否则客户端会向OPTS请求发送OPTION请求" / conversion"并希望得到一个响应"允许:CONVERT,"答案是否定的:这样回答是没有意义的。我认为的大多数实现都支持OPTIONS并使用" Allow,"使用标准HTTP方法进行响应。

Here's a great article on the topic

摘要:OPTIONS立即存在问题,因为它不支持缓存。替代方案:服务器范围的元数据:尝试well-known URI's。特定于资源:尝试在其响应中使用Link header,或在该资源的表示格式中使用链接。

最后,如果你所追求的是服务说明,请查看WADLRSDL

编辑:

dotnetguy在下面的评论中提出了一个很好的观点:OPTIONS在某些情况下无疑是有价值的(例如,CORS);我当然不打算另有说法。

答案 2 :(得分:0)

什么是HTTP OPTIONS请求?

这是客户端的一项请求,要求了解服务器将允许使用哪种HTTP方法,例如GETPOST等。

请求

在询问特定资源的选项时,请求可能如下所示:

OPTIONS /index.html HTTP/1.1

或一般在询问服务器时是这样的:

OPTIONS * HTTP/1.1

回复

响应将包含一个Allow标头以及允许的方法:

Allow: OPTIONS, GET, HEAD, POST

为什么服务器收到HTTP OPTIONS请求?

  • 某些REST API需要它(但是,如果您正在定义API,您会知道的)
  • 浏览器将其作为“预检”请求发送到服务器,以查看服务器是否理解CORS
  • 攻击者发送它以获取有关API的更多信息

如何响应HTTP OPTIONS请求?

  • 您可以在正文中使用Allowed标头甚至是document your API作为响应。
  • 您可以使用其他CORS定义的Access-Control-Request-*标头进行响应。
  • 您可以回复405 Method Not Allowed501 Not Implemented

如何停止获取HTTP OPTIONS请求?

  • 如果它来自浏览器,请更新您的API,以使其不会做任何“危险的事情”(例如PUTDELETEPOSTapplication/json )。仅执行simple requests

另请参见