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 变量中允许的最大整数是多少? [复制]