javascript - If-Modified-Since header 使 CORS OPTIONS 请求失败

标签 javascript ajax http-headers cors browser-cache

在以下代码中,自定义 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/

相关文章:

javascript - 从 Django 服务器读取 > 1 GB CSV 文件并在模板中显示

javascript - 正则表达式用值替换所有逗号

javascript - 如何在不重复应用它的元素的情况下使用 "ngFor"?

javascript - 如何从异步调用返回响应?

asp.net-mvc - 改变 : * incorrectly added to http header response (asp. 净 mvc3)

http - 为什么 PayPal 使用 HTTP 请求 header 进行 API 身份验证?

javascript - 为什么我不能在不损失 JS 精度的情况下将字符串转换为数字?

jquery - CORS header 'Access-Control-Allow-Origin' 丢失

jquery - 在 asp.net mvc 5 中发布之前使用 jquery 检查所有验证

erlang - 更改雅司病响应中的特定 header