Access-Control-Allow-Origin不允许起源

99封情书 提交于 2020-03-08 17:07:13

我在Sencha Touch 2应用程序(包装在PhoneGap中 )中向远程PHP服务器发出Ajax.request

服务器的响应如下:

XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php 。 Access-Control-Allow-Origin不允许使用来源http://localhost:8888

我该如何解决这个问题?


#1楼

这是由于同源政策 。 在Mozilla Developer NetworkWikipedia上查看更多内容

基本上,在您的示例中,您仅需要从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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!