【问题标题】:Error: No 'Access-Control-Allow-Origin' header is present. Even though I have added it错误:不存在“Access-Control-Allow-Origin”标头。虽然我加了
【发布时间】:2019-02-22 19:20:14
【问题描述】:

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

在“http://example.co.uk/request.php?foo=bar”访问 XMLHttpRequest 来自原点 'http://anothersite.co.uk' 已被 CORS 阻止 政策:没有“Access-Control-Allow-Origin”标头出现在 请求的资源。

我在论坛上看到很多问题都在问这个问题,人们给出了这样的回答(正如我所解释的那样):

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

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

  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 尝试了人们对它的建议,但这根本不起作用,也许我误解了它。无论如何,我真的不喜欢这个解决方案。让整个事情看起来毫无意义。

任何提示都会有帮助,如果我误解了整个事情,我很抱歉,但我无法做出正面或反面。我只是不断收到上面显示的相同错误。

提前感谢您的帮助! :)

【问题讨论】:

  • 所以为了清楚您尝试从中获取数据的服务器,您在该 .htaccess 上添加了 cors 标头,对吗?你告诉 apache 重新读取配置吗?
  • 是的,没错。抱歉,我不确定您所说的“重读”是什么意思?一定要读两遍吗?
  • 如果您编辑 apache 配置,它通常不会读取新更改,直到重新启动或被告知读取新配置...
  • 我已经尝试重新启动服务器,并且还在 cpanel 中禁用了此功能:“使用全局 DCV 直通而不是 .htaccess 修改(需要 EA4)”.. 所以它仍然忽略我的 .htaccess :(
  • 那么我建议你去找一些 apache 论坛,看看他们是否可以帮助你了解为什么它不读取你的配置

标签: php apache unity3d server


【解决方案1】:

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

【讨论】:

  • 我试过这个(在我发送请求的服务器上),但仍然无法正常工作。我也尝试过重新启动整个网络服务器(似乎过度)。服务器是否可能覆盖我的 htacess 和 php 文件头设置?
猜你喜欢
  • 2017-11-30
  • 2016-11-06
  • 2017-12-16
  • 1970-01-01
  • 2014-01-20
  • 2018-10-28
  • 2019-08-15
  • 2017-02-21
  • 2015-09-28
相关资源
最近更新 更多