在以下代码中,自定义标头(If-Modified-Since
)使ajax失败,状态HTTP/1.1 405 Not Allowed
为OPTIONS
预检请求。但是,如果我删除标题,请求可以正常工作(我不确定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
响应状态?
答案 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服务器没有,我想你会得到你在这里看到的那种响应。