JavaScript 和 CouchDB - 如何避免 GET/POST/PUT/DELETE 请求中的跨域策略错误

JavaScript 和 CouchDB - 如何避免 GET/POST/PUT/DELETE 请求中的跨域策略错误

我也在 Stack Overflow 上发布了这个问题。我认为这个问题与这两个问题重叠...


我正在创造一个简单的 JavaScript 包装器用于 CouchDB 的 REST-ful 接口,但我陷入了同源策略问题。

到目前为止,我一直在 Mozilla FireFox 上开发本地运行的代码(仅作为概念验证)。我的服务器在本地主机、端口 5984 上运行。

要在 Mozilla FireFox 中禁用跨域策略,您可以使用特权管理器,但它只让我完成了一半,因为我无法对我的服务器发出 PUT 请求......

/*
 * Including this in my JavaScript file only seems to disable cross-origin
 * policy checks for POST and GET requests in Mozilla FireFox.
 * PUT requests fail.
 */

netscape.security.PrivilegeManager.enablePrivilege(
    "UniversalBrowserRead UniversalBrowserWrite"
);



有什么方法可以配置我的服务器以隐藏其位置,这样我就不必实施特定于浏览器的解决方法来避免同源策略问题?如果没有:有哪些浏览器解决方法可以完全禁用同源策略?

答案1

同源策略 (SOP) 是为了防止信息从一个上下文/域注入另一个上下文/域而开发的。它们由浏览器实施和执行。每个供应商可能都有自己的 SOP。因此,任何解决方法可能对一个浏览器有效,但在另一个浏览器上却会失败。

我认为最好的(也是唯一的?)选择是使用某种代理。

如果您使用 Apache 托管您的 Web 应用程序,则可以轻松设置反向代理。我接受请求并将其发送到实际服务 (REST-API)。响应将发送回浏览器。SOP 不适用,因为 REST-API 的端点不在另一个域(即另一个服务器)中,而是在您的 Web 应用程序的域中(感谢代理)。

[编辑] 这是一个更好的解释:http://developer.yahoo.com/javascript/howto-proxy.html

相关内容