我正在为 IE 8 和 9 设置后备,为此我使用 JQuery 发送跨域 GET 请求。我正在 IE8 和 9 的模拟模式下使用 IE 11 进行测试。
服务器已针对 CORS 正确设置,并已使用纯 JavaScript XMLHttpRequest 进行跨域请求测试。
IE8/9上下文下的请求代码如下:
$.ajax({
type:"GET",
url: url,
beforeSend : function(xhr) {
xhr.setRequestHeader('Api-Version', config.apiVersion);
xhr.setRequestHeader('Api-Account-Key', config.accountKey);
xhr.setRequestHeader('Api-Authorisation-Key', config.authorisationKey);
},
success: function(data) {
callback(data);
}
});
当跨域发送请求时(此时站点在非本地主机域下运行),很明显自定义 header 没有被发送,这不是一个 OPTIONS 请求( Fiddler 调试器的输出)。
GET http://localhost:35000/api/example-url HTTP/1.1
Accept: */*
Origin: http://dev.local
Accept-Language: en-GB
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: localhost:35000
DNT: 1
Connection: Keep-Alive
Pragma: no-cache
如果我使用相同的代码从同一域发送请求, header 将按我的预期设置。
GET http://localhost:35000/api/example-url HTTP/1.1
x-requested-with: XMLHttpRequest
Accept-Language: en-gb
Referer: http://localhost:35000/Documentation
access-control-request-headers: x-requested-with
api-account-key: xxxxxx
Accept: */*
api-version: 1.0
api-authorisation-key: xxxx
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: localhost:35000
DNT: 1
那么是什么阻止了 JQuery,或者可能阻止浏览器在跨域上下文中发送 header ?
最佳答案
Internet Explorer 8 和 9 使用 XDomainRequest
API 执行跨域请求。根据IE9 jQuery AJAX with CORS returns "Access is denied" ,链接到this jQuery feature request之后,jQuery 开发团队断然拒绝支持 XDomainRequest
,因为它与 XMLHttpRequest
相比有太多缺点和不一致。
该答案还链接到 plugin that allows the use of XDR
in jQuery 。请注意,它仍然会受到 XDR
的内置限制,因此即使您可以使用该插件来让 jQuery 使用XDR
API。
关于javascript - JQuery $.ajax 跨域请求中未发送自定义 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26781535/