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

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

这是一个简单的答案: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

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

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

我们在app的url中添加了一个host参数:

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

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

  
  • f2309892是一个临时函数,具有随机名称,指向将处理响应的方法
  • json是我们发送给服务器的JSON

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

 f2309892( /*the json here*/ ); 

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

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

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

参考文献: Firefox , Chrome

没有触摸服务器 –

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

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

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

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

如果您正在使用XML,我建议在404中复制HTTP标头。如果您的404进程使用Content-Type of text/html responseXML ,则不会得到任何要解析的responseXML

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

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

另一个允许一种密钥交换

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

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