Internet Explorer 中允许的 Ajax 跨域请求

Posted

技术标签:

【中文标题】Internet Explorer 中允许的 Ajax 跨域请求【英文标题】:Ajax cross domain request allowed in internet explorer 【发布时间】:2013-09-10 21:06:22 【问题描述】:

我被要求创建一个可以从其他网站请求的反馈页面。

我正在使用渐进增强来显示页面。

当我能够使用 jquery 对话框时的 ajax 请求如下

    jQuery.support.cors = true;
    $.ajax(
        type: 'get',
        crossDomain: true,
        url: this.href
    ).done(function (data) 
        $dialogFeedback.html(data);
    ).error(function (jqXHR, textStatus, errorThrown) 
        $dialogFeedback.html(jqXHR.responseText || textStatus);
    );

在测试期间,我注意到 Internet Explorer 似乎允许跨域调用,即使响应 Access-Control-Allow-Origin HttpHeader 设置为客户端域。我注意到 Http origin 标头始终为空。

Chrome 和 Firefox 尊重它。 Http 源头不为空。

进行调用的客户端站点与反馈站点位于不同的端口,但两者都是本地主机。我读过一个不同的端口号视为跨域。

目前,我发现自己必须从 Referrer Http 标头中检索调用方/客户端域,如果我们不知道该域,则返回 404。

我真的希望依赖 Access-Control-Allow-Origin HttpHeader!

。 . .所以我的问题是为什么会这样?它实际上是预期/可能的吗?最好的解决方案是什么?

谢谢

【问题讨论】:

如果缺少origin header,那么根据IE,请求不是跨域的。 IE 在几个方面违反了same-origin policy spec。首先,它忽略端口号。其次,IE 将允许受信任区域中的域进行交互,而无需应用同源策略。 谢谢雷。我期待/害怕。我将保留我目前的方法,因为 IE 不可信。 我提到的两件事中哪一件适用于你的情况? 正如我在我的问题中所说的 - IE 中的原始标头始终为空,它是相同的域但端口号不同。了解更多关于跨域请求的信息,您似乎受制于浏览器,因此最好应用您自己的“已知域”策略。 哦,对不起,我最初一定是在你的问题中错过了这一点。是的,IE 很烂。还有什么是新的?不过,所有其他浏览器都是兼容的。 【参考方案1】:

如果缺少origin header,则根据IE,请求不是跨域的。 IE 在多个方面违反了同源策略 RFC。首先,它忽略端口号。其次,IE 将允许受信任区域中的域进行交互,而无需应用同源策略

【讨论】:

以上是关于Internet Explorer 中允许的 Ajax 跨域请求的主要内容,如果未能解决你的问题,请参考以下文章

javascript 变量中允许的最大整数是多少? [复制]

Python 函数名中允许的字符

如何限制连接到 GCDWebServer 中允许的 IP

如何将文本字段中允许的最大输入值限制为 10? [复制]

Angular 1.6.3 不允许 1.5.8 中允许的 JSONP 请求

如何限制文本框中允许的字符数?