错误:不存在“ Access-Control-Allow-Origin”标头。即使我添加了它

时间:2019-02-22 19:20:15

标签: php apache unity3d server

我正在Unity中构建应用程序并导出到HTML5。当我尝试发出简单的GET请求时,出现此错误:

  

访问“ http://example.co.uk/request.php?foo=bar”处的XMLHttpRequest   来自来源“ http://anothersite.co.uk”的信息已被CORS阻止   策略:“访问控制允许来源”标头不存在   请求的资源。

我在论坛上看到了很多问题,人们对此做出了回应(据我解释):

  
      
  1. 您请求的服务器/站点应该设置标头,以接受您请求的特定域,或者只是将其设置为通配符

  2.   
  3. 在浏览器中禁用网络安全性

  4.   
  5. 使用代理,例如https://cors-anywhere.herokuapp.com

  6.   

第一个对我来说很有意义,但我在服务器端尝试了以下操作,但无济于事:

  1. 在.htaccess文件中设置标题。例如标头集Access-Control-Allow-Origin“ *”

  2. 在“请求” php文件中设置标头:header('Access-Control-Allow-Origin:http://anothersite.co.uk'); (我也尝试过“ *”)

  3. 我尝试在Unity代码的“ anothersite.co.uk”请求中发送标头。

  4. 我尝试了人们对https://cors-anywhere.herokuapp.com的建议,方法是将URL传递给它,但这根本没有用,也许我误会了它。无论如何,我真的不喜欢这样作为解决方案..使整个事情变得毫无意义。

任何提示都将真正有帮助,对不起,如果我对整个事情都没有理解,我感到很抱歉,但是我无法做出正确的决定。.我只是不断地收到上面显示的相同错误。

在此先感谢您的帮助! :)

1 个答案:

答案 0 :(得分:0)

我使用以下PHP代码的版本来提供数据,它似乎可以正常工作。

if (isset($_SERVER['HTTP_ORIGIN'])) {
    // Decide if the origin in $_SERVER['HTTP_ORIGIN'] is one
    // you want to allow, and if so:
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400');    // cache for 1 day
}

// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
        // may also be using PUT, PATCH, HEAD etc
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS");         

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
        header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

    exit(0);
}