94

HTTPOPTIONS方法据说用于确定服务器在给定资源上支持哪些其他方法。鉴于此,我有两个问题:

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

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

要求:

OPTIONS /conversion HTTP/1.1

回复:

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

3 回答 3

23

RFC 2616 定义了“允许”(http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.14.7)。“公共”不再使用。“Access-Control-Allow-Methods”在 CORS 规范中定义(参见http://www.w3.org/TR/cors/)。

于 2012-08-13T07:59:49.267 回答
18

什么是 HTTP OPTIONS 请求?

客户端请求知道服务器将允许哪些 HTTP 方法,例如GET,POST等。

要求

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

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甚至可以在正文中记录您的 API
  • 您可以使用额外的 CORS 定义的Access-Control-Request-*标头进行响应。
  • 405 Method Not Allowed你可以用或回应501 Not Implemented

如何停止接收 HTTP OPTIONS 请求?

  • 如果它来自浏览器,则更新您的 API,使其不会做任何“危险”的事情(例如PUTor DELETE,或POSTwith application/json)。只执行简单的请求

也可以看看

于 2019-05-04T05:37:00.410 回答
9

回应标题:“如何响应 HTTP OPTIONS 请求?” 要回答这个问题,我想知道您为什么要响应 OPTIONS 请求?谁/什么向您发送了 OPTIONS 请求,为什么? 许多公共服务器以某种形式的“错误”或“不允许”(500、501、405)响应。因此,除非您在特定情况下,您的客户将合理地发送 OPTIONS 请求并期望返回有用/有意义的信息(例如,WebDAV、CORS),否则您可能希望回复:“不要那样做”。

关于您关于“OPTIONS /conversion HTTP/1.1”请求的问题:除非您知道您的服务器有某个客户端,否则客户端会将 OPTIONS 请求发送到“/conversion”并期望得到“允许:转换”的响应” 答案是否定的:这样回应是没有意义的。我认为大多数支持 OPTIONS 并以“允许”响应的实现以标准 HTTP 方法响应。

这是一篇关于该主题的精彩文章

摘要: OPTIONS 会立即出现问题,因为它不支持缓存。替代方案:服务器范围的元数据:尝试众所周知的 URI 的. 特定于资源:尝试在其响应中使用Link 标头,或该资源的表示格式的链接。

最后,如果您要的是服务描述,请查看WADLRSDL

编辑:

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

于 2014-08-21T06:08:31.540 回答