【发布时间】: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