尝试使用ajax
、getJSON
等函数从本地(非服务器)开发计算机获取外部URL。有没有办法绕过同源策略,以便我可以在本地进行测试,而不必上传到服务器?
尝试使用ajax
、getJSON
等函数从本地(非服务器)开发计算机获取外部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";
host
参数:http://localhost/app.html?host=test.beebole-apps.com
在生产环境中,使用POST将JSON发送到服务器。
但是,在这里负责ajax调用的函数将会对host
参数作出反应,并进行JSONP注入(GET)。
<script src="http://test.beebole-apps.com/?callback=f2309892&json={...}" />
f2309892
是一个临时函数,随机命名,指向处理响应的方法json
是我们发送到服务器的JSON这意味着您需要从后端获得一些合作,以便将包装在回调函数中的JSON提供给您,例如:
f2309892( /*the json here*/ );
除了大小限制(使用GET方法无法发送大型JSON到服务器),它的工作就像微风一样。
另一个优点是您可以从同一本地主机调用所有不同的系统(开发和测试)。
http://localhost/app.html?host=test.beebole-apps.com
在客户端上(您在其中下载一个带有某种Web服务器或URL解析器的应用程序...)并调用 test.beebole-apps.com
服务器? - ina不用触碰服务器 -
在Firefox中绕过同源安全策略的最快最简单的方法是安装Force CORS插件。它通过将正确的头信息插入到每个响应中,可以与任何服务一起使用。
我也遇到了这个问题,使用Chrome浏览器并添加--allow-file-access-from-files
选项并没有真正帮助解决问题。回到我的服务器需要返回的脚本上,我在响应中添加了这些头信息,然后它就可以正常工作了:
'Access-Control-Allow-Origin: http://localhost/'
还有一个用于允许一种密钥交换的函数
'Access-Control-Allow-Headers: X-KEY'
由于这是一个开发问题而不是终端用户/功能问题,因此与其专注于使AJAX跨域,不如把你的开发环境设置为代理以从生产服务器获取最新数据。这实际上非常容易做到。
你需要在开发环境中设置一个Web服务器(如果还没有的话),然后将服务器配置为响应404请求并获取、回显生产数据。你可以设置你的服务器只拾取AJAX数据文件(否则,如果生产资产开始出现在你的开发页面上,调试其他文件会很混乱)。所以如果http://dev.myserver.com/data/json/mydata.json
不存在,你的404脚本将获取http://prod.myserver.com/data/json/mydata.json
并将其回显给客户端。这个设置的好处是你可以轻松使用模拟数据:如果该文件在你的开发环境中存在,你的AJAX脚本将获取该文件,但是如果你删除或重命名该文件,你将得到生产数据。这个功能非常有用,我强烈推荐它。