IE8/IE9中的跨原点标头



由于jQuery ajax不适用于CORS/IE,我使用XDomainRequest从另一台服务器检索数据。工作很好,但我想发送一些标头("身份验证"、"内容类型")。

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

或者有人知道变通办法吗?

这就是我们为IE所做的。

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

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

这对我们来说比XDomainRequest好得多。

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

但我敢肯定,这是从IE8开始工作的。如果你也需要旧的浏览器,你必须使用不同的破解。

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

  1. CORS,用于支持它的浏览器
  2. iframe&window.postMessage作为主要回退
  3. 作为辅助回退的服务器端代理脚本

所有这些选项都运行良好,可靠,而且不会让人觉得太像黑客。几乎从未使用过第二个后备方案。

请记住,"Authentication"标头特别特殊,无论如何,在某些情况下它会被阻止,我不会感到震惊。我们添加了一个自定义标头"X-Authenticate",因为它一直在传递。

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

最新更新