有没有办法绕过Javascript / jQuery的本地访问相同的原始策略?

时间:2010-08-14 04:14:52

标签: javascript jquery same-origin-policy

尝试使用ajaxgetJSON和类似的函数从本地(非服务器)开发计算机获取外部URL。有没有办法绕过相同的原始策略,以便我可以在本地测试,而不必上传到服务器?

8 个答案:

答案 0 :(得分:6)

这是一个简单的答案:chrome --disable-web-security

从源代码(chrome_switches.h):

// Don't enforce the same-origin policy.  (Used by people testing their sites.)
const char kDisableWebSecurity[]            = "disable-web-security";

我想使用jquery.js将AJAX调用发送到在端口8080上运行的Google Apps python服务器。为了进行测试,我想在同一台机器上运行浏览器和服务器。

我不了解所有的安全细微差别,但对于临时开发,它似乎是一个合理的解决方法。只要我只使用chrome来测试这个标志,它应该不是问题。

以下是Mac OS X的完整命令:

/ Applications / Google \ Chrome.app/Contents/MacOS/Google \ Chrome --disable-web-security

答案 1 :(得分:4)

在开发我们的网络应用程序时,我们有同样的需求。这是我们如何做到的:

浏览器和服务器仅通过JSON进行通信 使用PURE(我们的JS模板引擎)在浏览器中呈现所有HTML 浏览器代码在本地开发,如下所示:

我们在应用的网址中添加了host参数:

http://localhost/app.html?host=test.beebole-apps.com

在生产中,JSON通过POST发送到服务器 但是这里负责ajax调用的函数会对host参数作出反应并改为JSONP注入(GET)。

<script src="http://test.beebole-apps.com/?callback=f2309892&json={...}" />
  • f2309892是一个临时函数,具有随机名称,指向将处理响应的方法
  • json是我们发送给服务器的JSON

这意味着您将需要来自后端的一些合作来为您提供包含在回调函数中的json:

f2309892( /*the json here*/ );

除了大小限制(你不能通过GET向服务器发送一个大的JSON),它的工作就像一件轻而易举的事。
另一个优点是您可以从同一个localhost调用所有不同的系统(开发和测试)。

答案 2 :(得分:2)

根据您用于开发的浏览器,有不同的方法可以解决此问题。例如:

  • 在Firefox(Gecko)中,将security.fileuri.strict_origin_policy设置为false
  • 在Chrome中,使用选项--allow-file-access-from-files
  • 启动浏览器

参考文献:FirefoxChrome

答案 3 :(得分:1)

不接触服务器 -

在Firefox中绕过相同原始安全策略的最快捷最简单的方法是安装Force CORS插件。通过在每个响应中插入适当的标头,这适用于任何服务。

https://addons.mozilla.org/en-US/firefox/addon/forcecors/

答案 4 :(得分:0)

答案 5 :(得分:0)

由于这是一个开发问题,而不是最终用户/功能问题,而不是专注于让AJAX跨域,而是将您的开发环境设置为代理,以从生产服务器获取最新数据。这实际上很容易做到。

您需要在开发环境中设置Web服务器(如果它还没有),然后配置服务器以通过提取然后回显生产数据来响应404请求。您可以设置服务器,以便仅拾取AJAX数据文件(否则,如果生产资产开始显示在您的开发页面上,则调试其他文件会很混乱)。因此,如果缺少http://dev.myserver.com/data/json/mydata.json,您的404脚本将获得http://prod.myserver.com/data/json/mydata.json并将其回显给客户端。关于这个设置的好处是你可以非常容易地使用模拟数据:如果你的开发环境中有文件,你的AJAX脚本就会得到它;但如果您删除或重命名该文件,您将获得生产数据。这个功能非常有用我不能推荐它。

如果您正在使用XML,我建议您在404中复制HTTP标头。如果您的404流程使用Content-Type text/html进行回复,则不会获得任何responseXML {{1}} 1}}来解析。

答案 6 :(得分:0)

我也遇到了这个问题,使用Chrome并且--allow-file-access-from-files选项并没有真正帮助。回到我的服务器需要返回的脚本,我将这些头文件添加到响应中并且工作正常:

'Access-Control-Allow-Origin: http://localhost/'

和另一个允许某种密钥交换的方式

'Access-Control-Allow-Headers: X-KEY'

答案 7 :(得分:0)

localhost不允许在CORS http://code.google.com/p/chromium/issues/detail?id=67743中使用lvh.me而不是