我正在开发一个Web应用程序。它使用基本身份验证。它必须处理OPTIONS请求。这些是Web浏览器预检请求以及来自WebDAV客户端的功能支持请求。
据我所知,OPTIONS请求必须在不请求身份验证的情况下处理(即我的服务器不应该响应401 Unauthorized),它必须给出如下响应:
OPTIONS https://localhost:44305/path/file.ext HTTP/1.1
Connection: Keep-Alive
User-Agent: some app
Host: localhost:44305
HTTP/1.1 200 OK
Content-Length: 0
DAV: 1, 2, 3
Date: Fri, 27 Dec 2013 17:10:21 GMT
我的问题是:我是否应始终对OPTIONS请求提供相同的响应,无论URL是什么,还是应该依赖于URL。
例如,如果找不到上例中的file.ext,我应该回复'404 Not found'还是'200 OK'?
答案 0 :(得分:12)
来自http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html:
OPTIONS方法表示请求获取有关Request-URI标识的请求/响应链上可用的通信选项的信息。此方法允许客户端确定与资源相关的选项和/或要求,或服务器的功能,而不会暗示资源操作或启动资源检索。
因此,OPTIONS可能是特定于服务器的,也可能是特定于资源的,具体取决于您的应用程序。 如果您使用跨源资源共享(CORS,例如尝试将XMLHttpRequest尝试到另一台服务器),它将发送OPTIONS请求以检查服务器是否需要特定资源的跨源请求,然后再使用POST请求。因此,在这种情况下,OPTIONS应该具有特定于资源的行为。 对于WebDAV,服务器特定的OPTIONS可能就足够了,因为客户端只会检查允许的方法(例如,如果支持WebDAV方法)。