如何响应HTTP OPTIONS请求?

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 ... 

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

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

关于“选项/转换HTTP / 1.1”请求的问题:除非你知道你的服务器有一些客户端,一个客户端会发送一个OPTIONS请求到“/ conversion”,并期待一个响应“Allow:CONVERT “答案是否定的,这样回答是没有意义的。 我认为大多数支持OPTIONS的实现以“Allow”作为响应,并使用标准的HTTP方法进行响应。

这是关于这个话题的一篇很棒的文章 。

简介:OPTIONS是立即有问题的,因为它不支持caching。 select:服务器范围的元数据:尝试着名的URI 。 特定于资源:尝试在其响应中使用链接标头 ,或在该资源的表示格式中使用链接。

最后,如果你想要的是一个服务描述,看看WADL或RSDL 。

编辑:

dotnetguy在下面的评论中提到了一个很好的观点:OPTIONS在某些情况下(例如CORS)是不可否认的。 我当然不打算另有build议。