If-Modied-Since标头使CORS OPTIONS请求失败

时间:2015-08-30 15:04:57

标签: javascript ajax http-headers cors browser-cache

在以下代码中,自定义标头(If-Modified-Since)使ajax失败,状态HTTP/1.1 405 Not AllowedOPTIONS预检请求。但是,如果我删除标题,请求可以正常工作(我不确定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中将此标头发送到jquery cdn以便能够获得304响应状态?

1 个答案:

答案 0 :(得分:1)

听起来Web服务器说它不允许OPTIONS动词(方法)。要确认,请检查响应是否包含Allow标头(根据HTTP规范,它应该),如果是,则包含它包含的内容。如果它不包含OPTION - 例如,如果它只是Allow: GET, HEAD, PUT,那么您的OPTIONS请求将始终失败。因此,如果您想要做的事情依赖于使用OPTIONS,那么它将不适用于该服务器。

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