我在做一个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'
其他回答
我曾经写过一篇关于这个问题的文章,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') ?>
正如Matt Mombrea在服务器端所说的那样,你可能会遇到另一个问题,即白名单拒绝。
你必须配置你的phonegap。plist。(我正在使用旧版本的phonegap)
对于cordova,命名和目录可能会有一些更改。但步骤应该大致相同。
首先选择支持文件> PhoneGap.plist
然后在“ExternalHosts”下面
添加一个值可能为“http://nqatalog.negroesquisso.pt”的条目。 我使用*仅用于调试目的。
如果你正在使用Apache,只需添加:
<ifModule mod_headers.c>
Header set Access-Control-Allow-Origin: *
</ifModule>
在构型中。这将导致来自您的web服务器的所有响应都可以从互联网上的任何其他站点访问。如果你打算只允许你的主机上的服务被特定的服务器使用,你可以用原始服务器的URL替换*:
Header set Access-Control-Allow-Origin: http://my.origin.host
如果你在Angular.js中得到这个,那么确保你像这样转义你的端口号:
var Project = $resource(
'http://localhost\\:5648/api/...', {'a':'b'}, {
update: { method: 'PUT' }
}
);
更多信息请看这里。
我会给你一个简单的解决方法。就我而言,我没有访问服务器的权限。在这种情况下,您可以更改您的谷歌Chrome浏览器的安全策略,以允许访问控制-允许起源。这很简单:
创建Chrome浏览器快捷方式 右键单击快捷方式图标->属性->快捷方式->目标
简单的粘贴到“C:\Program Files\谷歌\Chrome\Application\ Chrome .exe”——allow-file-access-from-files——disable-web-security。
位置可能不同。现在通过点击快捷方式打开Chrome。