【发布时间】: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 很烂。还有什么是新的?不过,所有其他浏览器都是兼容的。
标签: ajax http-headers cross-domain cors