在以下代码中,自定义 header (If-Modified-Since
) 使 ajax 失败,状态为 HTTP/1.1 405 Not allowed
of OPTIONS
飞行前请求。但是,如果我删除 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 服务器没有这样做,我认为您将得到与此处看到的完全一样的响应。
关于javascript - If-Modified-Since header 使 CORS OPTIONS 请求失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32297944/