JavaScript和CouchDB—如何避免GET/POST/PUT/DELETE请求上的跨源策略错误

JavaScript和CouchDB—如何避免GET/POST/PUT/DELETE请求上的跨源策略错误,javascript,same-origin-policy,Javascript,Same Origin Policy,我也在超级用户上发布这个问题。在我看来,这个问题与这两个问题重叠。。。 我正在为CouchDB的REST-ful接口创建,但我被同一来源策略问题所困扰 到目前为止,我一直在开发我的代码,以便在Mozilla FireFox上本地工作——并且仅作为概念证明。我的服务器正在本地主机端口5984上运行 要在Mozilla FireFox中禁用跨源策略,可以使用PrivilegeManager,但它只能让我半途而废,因为我不能对我的服务器放置请求 /* * Including this in my

我也在超级用户上发布这个问题。在我看来,这个问题与这两个问题重叠。。。


我正在为CouchDB的REST-ful接口创建,但我被同一来源策略问题所困扰

到目前为止,我一直在开发我的代码,以便在Mozilla FireFox上本地工作——并且仅作为概念证明。我的服务器正在本地主机端口5984上运行

要在Mozilla FireFox中禁用跨源策略,可以使用PrivilegeManager,但它只能让我半途而废,因为我不能对我的服务器放置请求

/*
 * 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"
);



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

不幸的是,禁用同源策略的任何浏览器工作区都可能被视为严重的安全漏洞,并尽快修复

看看你是否能想出一种方法,在同一原产地的政策下工作,而不试图绕过它

您可以在目标服务器上提供示例脚本吗?您能否构建一个反射脚本,在用户计算机上的本地脚本上载他们修改的内容后,将目标脚本加载到您的服务器上


应该有一个好的解决方案,不涉及绕过同一原产地政策。尝试破解这一问题是确保代码在未来浏览器中无法正常工作的一个好方法。

我也遇到了这个问题,试图在连接到虚拟化CouchDB服务器的本地html文件上运行自动测试,我的解决方案如下:

当您无法在服务器上启用CORS时,我为最简单的解决方案创建了一个小型实现(并将其开源)

您需要将.js和.html文件上载到目标服务器(如果需要,可以使用任何安全机制限制对该文件的访问)。或者您可以更改html文件上的一些简单参数,以按域进行限制

在您的页面上,您使用相同的脚本创建一个不可见的iframe,在其中加载hosted.html,并使用window.postMessage()通过该iframe代理某些方法(某种RPC),默认情况下,jQuery ajax方法可以在无需额外配置的情况下进行代理

所有这些都需要一行js代码:)


(可以自由地使用它和分叉!)

所以从CouchDB服务器提供JavaScript文件可以解决我的跨源问题吗?这是一种选择。由于CouchDB通常不是为直接用户交互而设置的,所以它不是一个标准设置。根据服务器的配置方式,您可能会将URL别名为数据库服务器。因此,如果要从CouchDB服务器实例提供脚本,在从文件系统运行的文件中使用这些脚本时是否会遇到SOP问题?。。。也就是说:如果从CouchDB实例引用我的JavaScript包装器(
http://localhost:5984/_utils/wapper.js
)位于文件系统上的文件中。当从wrapper.js调用函数,执行对CouchDB服务器的get/POST/PUT等请求时,我会得到任何SOP错误吗?不幸的是,本地文件系统SOP变得很奇怪。有些浏览器更严格,有些则不那么严格。如果您正在使用
http://localhost/
syntax,您必须使用web模型。如果您使用
file://
样式的语法访问文件,您将获得不同的权限。