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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误:不存在“Access-Control-Allow-Origin”标头。即使我添加了它相关的知识,希望对你有一定的参考价值。

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

从'http://example.co.uk/request.php?foo=bar'访问'http://anothersite.co.uk'的XMLHttpRequest已被CORS策略阻止:请求的资源上没有'Access-Control-Allow-Origin'标头。

我在论坛上看到了许多问题,人们给出了这些答案(正如我对它们的解释):

  1. 您请求的服务器/站点应设置标题,以接受您请求的特定域或仅将其设置为通配符
  2. 在浏览器中禁用Web安全性
  3. 使用代理,例如https://cors-anywhere.herokuapp.com

第一个对我有意义,但我在服务器端尝试了以下内容无济于事:

  1. 在.htaccess文件中设置标头。例如Header Set Access-Control-Allow-Origin“*”
  2. 在“请求”php文件中设置标题:header('Access-Control-Allow-Origin:http://anothersite.co.uk'); (我也试过“*”)
  3. 我尝试在Unity代码中的“anothersite.co.uk”请求中发送标题。
  4. 我通过传递URL来尝试人们对https://cors-anywhere.herokuapp.com的建议,但这并不适用于所有,也许我很想念它。我真的不喜欢这个作为解决方案..使整个事情看起来毫无意义。

任何提示都会有所帮助,如果我误解了整个事情,我很抱歉,但我无法做出头或尾......我只是继续得到上面显示的相同错误。

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

答案

我使用以下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);
}

以上是关于错误:不存在“Access-Control-Allow-Origin”标头。即使我添加了它的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 开发服务器上为 Soap Web 服务启用 CORS 设置

预检响应中不允许使用方法选项

跨域请求在 Firefox 中被阻止

Laravel 如何解决跨域请求被阻止

如何从 safari 扩展中调用 python 函数

编译器错误消息: CS0103: 当前上下文中不存在名称