我在做一个Ajax。请求一个远程PHP服务器在Sencha Touch 2应用程序(包装在PhoneGap)。
服务器的响应如下:
XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。Access-Control-Allow-Origin不允许Origin http://localhost:8888。
我该如何解决这个问题?
我在做一个Ajax。请求一个远程PHP服务器在Sencha Touch 2应用程序(包装在PhoneGap)。
服务器的响应如下:
XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。Access-Control-Allow-Origin不允许Origin http://localhost:8888。
我该如何解决这个问题?
当前回答
露比·辛纳屈
response['Access-Control-Allow-Origin'] = '*'
对每个人来说
response['Access-Control-Allow-Origin'] = 'http://yourdomain.name'
其他回答
如果你在Angular.js中得到这个,那么确保你像这样转义你的端口号:
var Project = $resource(
'http://localhost\\:5648/api/...', {'a':'b'}, {
update: { method: 'PUT' }
}
);
更多信息请看这里。
你可以在不修改服务器的情况下让浏览器在HTTP OPTIONS的响应中包含Access-Control-Allow-Origin: *。
在Chrome中,使用这个扩展。如果你在Mozilla上检查这个答案。
我曾经写过一篇关于这个问题的文章,Cross Domain AJAX。
如果你有响应服务器的控制权,最简单的方法是添加一个响应头:
Access-Control-Allow-Origin: *
这将允许跨域Ajax。在PHP中,你需要像这样修改响应:
<?php header('Access-Control-Allow-Origin: *'); ?>
你可以把头集Access-Control-Allow-Origin *设置放在Apache配置或htaccess文件中。
应该注意的是,这将有效地禁用CORS保护,这很可能使您的用户暴露在攻击之下。如果你不知道你特别需要使用通配符,你不应该使用它,相反,你应该把你的特定域列入白名单:
<?php header('Access-Control-Allow-Origin: http://example.com') ?>
如果你不能控制服务器,你可以简单地在Chrome启动器中添加这个参数:——disable-web-security。
注意,我不会将它用于正常的“网上冲浪”。参考:在Chrome中禁用同源策略。
如果你使用Phonegap来构建应用并将其加载到设备上,这就不是问题了。
我们也有同样的问题,phonegap应用程序在chrome测试。 在打开Chrome之前,我们每天使用下面的批处理文件。 记住在运行这个之前,你需要从任务管理器中清除所有的chrome实例,或者你可以选择chrome不运行在后台。
BATCH:(使用cmd)
cd D:\Program Files (x86)\Google\Chrome\Application\chrome.exe --disable-web-security