gpt4 book ai didi

backbone.js - 在 IE8/9 中使用 Backbone 发出 CORS 请求

转载 作者:行者123 更新时间:2023-12-03 00:00:35 25 4
gpt4 key购买 nike

我正在编写一个将在 app.ourdomain.com/store 上运行的主干应用程序。

我想使用我们 API 中内置的 HTTP 身份验证来访问 api.ourdomain.com/ourApi 上的数据。

现在,据我了解,响应中需要 CORS header Access-Control-Allow-Origin: * 才能允许这种跨源支持。

但是,这在 IE8/9 中不起作用。我在 SO 和其他地方读过,我可以简单地添加 $.support.cors = true; 这将神奇地开始在 IE8/9 上工作。

在我深入研究这个项目之前,我希望有实践经验的人能够回答这个问题:

如果我们编写 API 来处理飞行前 OPTIONS 请求,允许跨域请求,并将此覆盖添加到 $.support 对象中,那么我们是否可以完全访问所有内容HTTP 动词(包括 PUT/DELETE)、身份验证的能力以及在 IE8/9 中包含自定义 header (就像我们在所有使用 XMLHttpRequest 的现代浏览器中所做的那样)?

This article描述了 IE8/9 用于此类请求的 XDomainRequest 对象的约束/限制。我特别关心 #3 和 #5,其中指出:

#3: No custom headers may be added to the request

我们使用自定义 header 来指示发出请求的 CustomerID

#5: No authentication or cookies will be sent with the request

我们使用 HTTP 身份验证在初始请求中对用户进行身份验证,并在后续请求中使用原始请求期间返回的 access_token。

由于现在强制支持 IE8/9,这是否意味着我无法使用 Backbone 向我们系统上的不同子域请求数据,而不需要做一些愚蠢的事情,例如在 subdomainA 上创建代理 API 来访问 subdomainB 上的数据?

干杯。

最佳答案

你的评估听起来是正确的。不幸的是,在 IE8/9 中使用 CORS 时,没有针对自定义 header 、附加方法或 cookie 的解决方法(IE10 应该完全支持这些)。

代理服务器是一种选择。另一种选择是在远程域上托管一个 html 页面,将此 HTML 页面包含在调用页面上的 iframe 中,然后使用 window.postMessage 在 iframe 和调用页面之间进行通信。由于 iframe 页面与 API 位于同一域,因此它可以使用 XHR 发出同源请求,然后使用 window.postMessage 将数据传递到调用页面。

这种“iframe 代理”机制仍然需要对 subdomainB 进行一些黑客攻击,特别是托管 iframe 页面。然而,它可能仍然比成熟的代理服务器更好,因为它是一个纯粹的基于 HTML/JavaScript 的解决方案。注意IE8/9仍然有some restrictionspostMessage (尽管它们似乎不影响 iframe)。您可以在这里找到此“iframe 代理”机制的描述:

关于backbone.js - 在 IE8/9 中使用 Backbone 发出 CORS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14406793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com