跨源请求已阻止:同源策略禁止在URL上读取远程资源

时间:2016-03-31 12:13:39

标签: php angularjs web-applications cross-domain httprequest

这是非常着名的浏览器错误。我知道它已被讨论了很多,但我注意到这是一个非常一般的错误,所以我想提出我的问题。

我在我有权访问的服务器上发出简单的请求(获取,发布)。我的浏览器(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 个答案:

答案 0 :(得分:4)

尝试添加

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");

答案 1 :(得分:1)

我已经解决了这个问题。

  1. 在您的config.php中,在您的domain.com中添加www pre EXA。
  2. // HTTP

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

    // HTTPS

    define('HTTPS_SERVER', 'http://domain name with www/'); 
    
    1. 添加htaccess文件

      RewriteCond%{REQUEST_METHOD}选项 RewriteRule ^(。*)$ $ 1 [R = 200,L]

答案 2 :(得分:0)

有几种方法可以做到这一点。一种方法是javascript方式,需要回调,可在此处找到一个示例:Loading cross domain html page with AJAX

另一种方法是利用PHP的curl功能。当然有很多方法可以做到这一点,但一种适合我的方法是:

  • 创建一个独立的php页面(可以调用它" fetch.php"如果你 喜欢)有一份工作。那项工作是向一个给定的卷曲请求 URL(在这种情况下是您的跨域URL)并回显它的数据 从远程站点获取。
  • 从跨域更改AJAX URL 上一步中创建的文件名的URL。
  • AJAX然后知道 即使它从跨域位置获取数据,它也会向当前域内的某个位置发出HTTP请求。

希望这有帮助, 亚当

答案 3 :(得分:0)

您可以将被阻止的URL列入白名单,例如:

script-src'unsafe-inline'https:'nonce-abcdefg''strict-dynamic'

答案 4 :(得分:-2)

我尝试在服务器端更改几次尝试后添加chrome插件“Allow-Control-Allow-Origin”。一切都很好。