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 服务器没有的情况下,我认为您会得到您在这里看到的那种响应。
在以下代码中,自定义 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 服务器没有的情况下,我认为您会得到您在这里看到的那种响应。