OPTIONS请求认证

13

我正在开发一个Web应用程序。它使用基本身份验证,并且必须处理OPTIONS请求。这些是Web浏览器的预检请求,以及来自WebDAV客户端的功能支持请求。

据我所知,OPTIONS请求必须在不请求验证的情况下进行处理(也就是说,我的服务器不应该响应401未经授权),它必须给出以下类似的响应:

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
我的问题是:无论URL如何,我是否应该始终提供相同的OPTIONS请求响应,还是应该根据URL进行响应?
例如,在上面的示例中如果找不到file.ext文件,我应该响应'404 Not found'还是'200 OK'?
1个回答

16

来自http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html:

OPTIONS方法表示请求关于由Request-URI标识的请求/响应链上可用通信选项的信息。此方法允许客户端确定资源相关的选项和/或要求,或服务器的功能,而不意味着资源操作或启动资源检索。

因此,OPTIONS可能特定于服务器,也可能特定于资源,这取决于您的应用程序。 如果您使用跨域资源共享(CORS,例如尝试向另一台服务器发送XMLHttpRequest),它将发送OPTIONS请求以检查服务器是否预期跨域请求针对特定资源,然后再进行POST请求。在这种情况下,OPTIONS应该表现出资源特定行为。 对于WebDAV来说,只需要服务器特定的OPTIONS就足够了,因为客户端只是检查允许的方法(例如是否支持WebDAV方法)。


4
谢谢,Steffen。这也是我在思考的问题。不同URL有不同的响应可能会带来问题,因为攻击者可以利用OPTIONS请求发现服务器内容/URL和该特定资源支持的功能。这看起来像一个安全问题。 - IT Hit WebDAV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接