IE8 / IE9中的跨源头
由于jQuery ajax不适用于CORS / IE,我使用XDomainRequest
来检索来自另一个服务器的数据。 工作很好,但我想发送一些标题(’Authentification’,’content-type’)。
是否有机会在XDomainRequest中添加/更改标头?
或者有人知道解决方法吗?
这就是我们为IE做的。
如果您可以控制目标域,请在那里托管(静态)html文件。 使用iframe包含html。
现在这个iframe实际上可以访问本地域,因此您可以在父框架和子框架之间进行通信以获得所需的内容。
对我们来说,这比XDomainRequest 要好得多。
window.postMessage是设置通信的最佳方式:
但我很确定自IE8以来才开始工作。 如果您还需要旧版浏览器,则必须使用其他黑客。
在我们的例子中,这是我们的3层系统:
- CORS,适用于支持它的浏览器
- iframe和window.postMessage作为主要后备
- 服务器端代理脚本作为辅助回退
所有这些选项都运行良好,可靠,并且感觉不像黑客。 次要后备几乎没有使用过。
请记住,“身份validation”标题具体是特殊的,我不会感到震惊,因为在某些情况下它会被阻止。 我们添加了一个自定义标题’X-Authenticate’,因为它始终通过。
IE的XDomainRequest不允许设置自定义标头。 请参阅此处的第3项: http : //blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx XDomainRequest对象被锁定到它的位置很难做出经过身份validation的请求。