IE8 / IE9中的跨源头

时间:2012-03-11 04:10:59

标签: javascript jquery internet-explorer cors xdomainrequest

由于jQuery ajax不能用于CORS / IE,我使用XDomainRequest来检索来自另一个服务器的数据。工作很好,但我想发送一些标题('Authentification','content-type')。

是否有机会在XDomainRequest中添加/更改标题?

或者有人知道解决方法吗?

2 个答案:

答案 0 :(得分:17)

这就是我们为IE做的。

如果您可以控制目标域,请在那里托管(静态)html文件。使用iframe包含html。

现在这个iframe确实可以访问本地域,因此您可以在父框架和子框架之间进行通信,以获得所需的内容。

这比我们的XDomainRequest更好地很多

window.postMessage是设置通信的最佳方式:

但我很确定自IE8以来才开始工作。如果您还需要旧浏览器,则必须使用其他黑客。

在我们的案例中,这是我们的3层系统:

  1. CORS,适用于支持它的浏览器
  2. iframe& window.postMessage作为主要后备支持
  3. 服务器端代理脚本作为辅助回退
  4. 所有这些选项都运行良好,可靠并且不像黑客那样感觉太过分。次要的后备几乎没有使用过。

    请记住,“身份验证”标题具体是特殊的,我不会感到震惊的是,在某些情况下它会被阻止。我们添加了一个自定义标题'X-Authenticate',因为它始终通过。

答案 1 :(得分:2)

IE的XDomainRequest不允许设置自定义标头。请参阅此处的第3项:http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx XDomainRequest对象被锁定到难以进行经过身份验证的请求的位置。