我在做一个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。
我该如何解决这个问题?
当前回答
这可能对任何需要为引用器的'www'和'非www'版本提供异常的人来说都很方便:
$referrer = $_SERVER['HTTP_REFERER'];
$parts = parse_url($referrer);
$domain = $parts['host'];
if($domain == 'google.com')
{
header('Access-Control-Allow-Origin: http://google.com');
}
else if($domain == 'www.google.com')
{
header('Access-Control-Allow-Origin: http://www.google.com');
}
其他回答
你可以在不修改服务器的情况下让浏览器在HTTP OPTIONS的响应中包含Access-Control-Allow-Origin: *。
在Chrome中,使用这个扩展。如果你在Mozilla上检查这个答案。
如果你正在使用Apache,只需添加:
<ifModule mod_headers.c>
Header set Access-Control-Allow-Origin: *
</ifModule>
在构型中。这将导致来自您的web服务器的所有响应都可以从互联网上的任何其他站点访问。如果你打算只允许你的主机上的服务被特定的服务器使用,你可以用原始服务器的URL替换*:
Header set Access-Control-Allow-Origin: http://my.origin.host
在使用各种api时,我遇到过几次这种情况。通常一个快速的解决方法是在字符串的末尾添加“&callback=?”有时&号必须是字符代码,有时是“?””:“回调= ?”(见预测。jQuery的API使用方法
当您收到请求时,您可以
var origin = (req.headers.origin || "*");
而当你不得不这样回答的时候:
res.writeHead(
206,
{
'Access-Control-Allow-Credentials': true,
'Access-Control-Allow-Origin': origin,
}
);
正如Matt Mombrea在服务器端所说的那样,你可能会遇到另一个问题,即白名单拒绝。
你必须配置你的phonegap。plist。(我正在使用旧版本的phonegap)
对于cordova,命名和目录可能会有一些更改。但步骤应该大致相同。
首先选择支持文件> PhoneGap.plist
然后在“ExternalHosts”下面
添加一个值可能为“http://nqatalog.negroesquisso.pt”的条目。 我使用*仅用于调试目的。