HTTP OPTIONS
方法应该用于确定服务器在给定资源上支持的其他方法。鉴于此,我有两个问题:
这种反应是什么样的?我在Public
,Allow
甚至Access-Control-Allow-Methods
标题中看到了包含CSV列表的示例。他们都需要吗?有什么不同? RFC 2616在这里似乎没什么帮助。
使用它来列出资源在非REST-API环境中支持的操作是否合适?例如,如果我的ConversionController
支持动作convert
,那么这样的回复是否有意义:
请求:
OPTIONS /conversion HTTP/1.1
响应:
HTTP/1.1 200 OK
...
Allow: CONVERT
...
答案 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,或在该资源的表示格式中使用链接。
编辑:
dotnetguy在下面的评论中提出了一个很好的观点:OPTIONS在某些情况下无疑是有价值的(例如,CORS);我当然不打算另有说法。
答案 2 :(得分:0)
这是客户端的一项请求,要求了解服务器将允许使用哪种HTTP方法,例如GET
,POST
等。
请求
在询问特定资源的选项时,请求可能如下所示:
OPTIONS /index.html HTTP/1.1
或一般在询问服务器时是这样的:
OPTIONS * HTTP/1.1
回复
响应将包含一个Allow
标头以及允许的方法:
Allow: OPTIONS, GET, HEAD, POST
Allowed
标头甚至是document your API作为响应。Access-Control-Request-*
标头进行响应。405 Method Not Allowed
或501 Not Implemented
。 PUT
或DELETE
或POST
与application/json
)。仅执行simple requests。