我在Sencha Touch 2应用程序(包装在PhoneGap中 )中向远程PHP服务器发出Ajax.request
。
服务器的响应如下:
XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php 。 Access-Control-Allow-Origin不允许使用来源
http://localhost:8888
。
我该如何解决这个问题?
#1楼
这是由于同源政策 。 在Mozilla Developer Network或Wikipedia上查看更多内容 。
基本上,在您的示例中,您仅需要从nqatalog.negroesquisso.pt
而不是localhost
加载http://nqatalog.negroesquisso.pt/login.php
页面。
#2楼
不久前,我写了一篇有关此问题的文章Cross Domain AJAX 。
如果您控制响应服务器,最简单的方法是为以下项添加响应标头:
Access-Control-Allow-Origin: *
这将允许跨域Ajax 。 在PHP中,您将需要像这样修改响应:
<?php header('Access-Control-Allow-Origin: *'); ?>
您可以将Header set Access-Control-Allow-Origin *
设置放入Apache配置或htaccess文件中。
应该注意的是,这有效地禁用了CORS保护,这很可能使您的用户受到攻击 。 如果您不知道自己是否特别需要使用通配符,则不要使用它,而应该将特定域列入白名单:
<?php header('Access-Control-Allow-Origin: http://example.com') ?>
#3楼
如果您无法控制服务器,则只需将以下参数添加到Chrome启动器中即可:-- --disable-web-security
。
请注意,我不会将其用于常规的“网络冲浪”。 作为参考,请参阅这篇文章: 在Chrome中禁用同一来源策略 。
您可以使用Phonegap实际构建应用程序并将其加载到设备上,这不会成为问题。
#4楼
由于Matt Mombrea在服务器端是正确的,因此您可能会遇到另一个问题,即将拒绝列入白名单。
您必须配置phonegap.plist。 (我使用的是旧版的phonegap)
对于cordova,命名和目录可能会有一些更改。 但是步骤应该大致相同。
首先选择支持文件> PhoneGap.plist
然后在“外部主机”下
添加一个条目,其值可能为“ http://nqatalog.negroesquisso.pt ”。我仅将*用于调试目的。
#5楼
如果您使用的是Apache,只需添加:
<ifModule mod_headers.c>
Header set Access-Control-Allow-Origin: *
</ifModule>
在您的配置中。 这将使您可以从Internet上的任何其他站点访问来自Web服务器的所有响应。 如果打算只允许特定服务器使用主机上的服务,则可以将*
替换为原始服务器的URL:
Header set Access-Control-Allow-Origin: http://my.origin.host
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3189977