跨来源请求被阻止:同源策略禁止读取位于url的远程资源。

3
这是一个非常著名的浏览器错误。我知道这个问题已经讨论了很多,但我注意到它是一个非常普遍的错误,所以我想呈现一下我的问题。
我正在向我有权限访问的服务器发送简单的请求(get、post)。我的浏览器(Chrome、Firefox)显示“Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at url (Reason: CORS header 'Access-Control-Allow-Origin' does not match 'null')。”的错误。
当我使用一些(黑客)插件时,我可以正常收到响应。
我尝试在我的后端(服务器上)添加以下内容:
header('Access-Control-Allow-Origin: *');

index.php 文件中没有运气。还有其他的想法吗?
5个回答

6

尝试添加

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT, GET, POST");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");

运气不好... 关于我应该放置头文件的文件,我是否忽略了某些东西? - korteee
只需将其添加到您的主PHP文件中。 - ddepablo
那就是index.php文件。 - korteee
我也遇到过这个问题。我解决的方法是将您的请求发送到您自己域名下的文件中,然后该文件通过PHP中的curl请求访问您需要获取数据的站点/页面/服务器。 - Adam T
如果您正在通过HTML或PHP页面的AJAX进行此请求,那么您很可能会直接调用跨域URL。-- 现在我的方法是,创建一个新的php文件(如果您喜欢,可以称之为“fetch.php”)。 AJAX URL现在将是“fetch.php”。在页面fetch.php上,您实例化一个curl请求到您试图访问的跨域URL。 PHP Curl请求通常不会像AJAX请求一样被阻止跨域。 - Adam T

1
我已经解决了这个问题。
  1. 在你的config.php文件中,在domain.com前面添加www。 例如:

// HTTP

define('HTTP_SERVER', 'http://domain name with www/');

// HTTPS

define('HTTPS_SERVER', 'http://domain name with www/'); 
  1. 将以下代码添加到你的htaccess文件中:

    RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L]


0

有几种方法可以实现这个功能。一种方法是使用JavaScript,需要一个回调函数,可以在此处找到一个示例:使用AJAX加载跨域HTML页面

另一种方法是利用PHP的curl功能。当然,有很多方法可以做到这一点,但对我来说效果很好的一种方法是:

  • 创建一个独立的php页面(如果您喜欢,可以称其为“fetch.php”),它只有一个任务。该任务是向给定的URL(在这种情况下是您的跨域URL)发出curl请求,并回显从远程站点获取的数据。
  • 将AJAX URL从跨域URL更改为上一步创建的文件名。
  • AJAX知道它正在向其当前域内的位置发出HTTP请求,即使它正在从跨域位置获取其数据。

希望这可以帮助到您, 亚当


0
您可以像这样将被阻止的URL添加到白名单中:

-2

我尝试添加了一个名为“Allow-Control-Allow-Origin”的Chrome插件,经过几次服务器端更改后,一切都正常工作了。


1
我知道,但重点是不使用插件...这样所有用户都可以访问。 - korteee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接