If-Modied-Since header 使 CORS OPTIONS 请求失败

If-Modied-Since header makes CORS OPTIONS request fail

在以下代码中,自定义 header (If-Modified-Since) 使 ajax 失败,OPTIONS 预检请求的状态为 HTTP/1.1 405 Not Allowed。但是,如果我删除 header,请求会按预期正常工作(我不确定 OPTIONS 是否根本没有发送,或者开发控制台只是不显示它)。为什么会这样? (托管 googleapis 的情况相同 jquery)。

http = new XMLHttpRequest();
http.open('GET', 'http://code.jquery.com/jquery-2.1.4.min.js');
http.setRequestHeader('If-Modified-Since', 'Sat, 29 Oct 1994 19:43:31 GMT')
http.send();

此外,有没有办法将 xhr 中的 header 发送到 jquery cdn 以获得 304 响应状态?

这听起来像是 Web 服务器在说它不允许 OPTIONS 动词(方法)。要确认,请检查响应是否包含 Allow header(根据 HTTP 规范,它应该),如果是,它包含什么。如果它不包含 OPTION——例如,如果它只是 Allow: GET, HEAD, PUT,那么您的 OPTIONS 请求将始终失败。所以如果你想做的事情依赖于使用OPTIONS,它不会与那个服务器一起工作。

根据 CORS 规范中的要求,设置 If-Modified-Since header(或 any other header except Accept, Accept-Language, Content-Language or a few Content-Type cases)会导致客户端需要进行预检;进行预检需要使用 OPTIONS 方法。但是 CORS 规范和任何其他规范都没有要求所有 Web 服务器实际上都必须支持 OPTIONS 方法;在 Web 服务器没有的情况下,我认为您会得到您在这里看到的那种响应。