javascript - JQuery $.ajax 跨域请求中未发送自定义 header

标签 javascript jquery ajax cors

我正在为 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/

相关文章:

javascript - 将数组从一个 php 页面传递到另一个 javascript 页面的最佳实践?

javascript - 没有通过ajax获取数据

javascript - 使用 JavaScript 从 Date 对象或日期字符串中获取工作日

javascript - 多条折线路线上的 Leaflet Loop Snake 功能

jquery - 取消选择选定的树节点 JStree - jQuery

javascript - 第二次单击时转义 <b> 标记

C# 模拟 xmlhttprequest 并获取 json 响应

javascript - 寻找一个插件来更快更容易地引用所有js文件

javascript - jQuery:从无序列表中获取点击 anchor

javascript - 获取按天分组的时间