【问题标题】:BasicAuth enabled CORS requests on IE8/9BasicAuth 在 IE8/9 上启用了 CORS 请求
【发布时间】:2014-01-14 04:18:21
【问题描述】:

所以,这发生了。事实的快速要点列表:

  • 我有一个 HAL 后端,它位于不同的子域中,但(感谢 IE10 支持)与我的 Web 应用位于同一域中。
  • 我需要发出 POST 和 GET 请求。
  • 我不需要支持 IE7 或更低版本。
  • 我需要支持 IE8 及更高版本。
  • API 的构建方式,我需要发送自定义标头并能够访问响应标头。其中之一是 basicAuth 标头,但可能还有更多(例如 Location 响应标头等)。
  • 我很清楚 XDomainRequest 对象的局限性。
  • 我可以完全控制 API 和 Web 应用服务器、代码以及介于两者之间的所有内容。然而,我们认为 API 构建良好,不应该因为一个浏览器的糟糕实现而改变,因此我们希望尽量减少对它的更改。

事情就是这样发展的。到目前为止,我已经检查了一些不起作用的替代方案。这是它们的列表以及为什么在这种情况下它没有帮助: - JSONP,它只允许 GET 请求。 - easyXDM,它不允许发送自定义标头。 - OpenAjax Hub,文档似乎令人困惑且稀缺,但似乎也不支持自定义标头。

所以问题来了:我缺少什么解决方案吗?我现在唯一的希望是构建一个自定义 swf 并覆盖 jQuery 的 $.ajax 函数以便能够将其用作传输,但我不确定它是否会起作用。从理论上讲,它应该。在实践中……嗯,这完全是另一回事。所以在深入 swf 地狱的深处之前,我想我可能会问是否有人曾经遇到过这个问题并有任何形式的建议?

【问题讨论】:

  • 如果您对两台服务器都有控制权,只要将适当的 Access-Control-* 标头添加到请求/响应对,CORS 应该不会成为问题。
  • @MarcellFülöp 由于这些浏览器中跨域 ajax 传输的限制:XDomainRequest,您无法在 IE8 或 IE9 中使用跨域 ajax 请求发送自定义标头。请查看下面的答案以获取解决方案。

标签: javascript internet-explorer cors


【解决方案1】:

您缺少一个嵌入式 iframe,其 src 位于另一个域中,并使用 window.postMessage 在两个窗口之间来回切换,嵌入式 iframe 为您的子域执行所有 XHR,然后发送使用您通常会在 CORS 中看到的所有标头/数据返回自定义包装的响应。

您将获得 IE8/9 支持。

【讨论】:

  • 这是这个概念的一个很好的实现:github.com/jpillora/xdomain
  • 到目前为止,这似乎是一个不错的选择。我正在尝试使用@RayNicholus,但我有点担心,因为我正在使用 Backbone,并且我已经用很多东西修补了同步方法。我会让你们知道它是怎么回事!谢谢!
  • @enrique-ramirez 这确实是您唯一的选择(除了更改界面、删除自定义标头和使用 XDomainRequest)。无论您使用预构建的库,还是进行 IE 测试(测试 XDomainRequest(IE10/11 受到打击,但至少它们都可以工作),以及更改您的界面以设置 iframe 等等)都是您的解决方案必须使用(同样,没有改变你的 API)。您真正需要决定的是,您是为客户端编写一个特定于 IE 的包装器,并在其他地方使用 CORS,还是只是在所有地方使用 iframe。
  • @Norguard 似乎是这样(swf 路由似乎太……丑陋且不安全)。我正在尝试一个仅限 IE 的 polyfill(这感觉就像一个在任何地方都可以使用的丑陋黑客)。我目前正在等待部署到我们的暂存环境以正确检查 IE,因为它似乎在自签名证书方面存在一些问题。一旦我能很好地了解事情的进展,我会接受你的回答!再次感谢!
猜你喜欢
  • 1970-01-01
  • 2018-08-07
  • 2019-04-26
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多