首页 >后端开发 >php教程 >当我在 PHP 中设置 CORS 标头时,为什么仍然收到'Access-Control-Allow-Origin”错误?

当我在 PHP 中设置 CORS 标头时,为什么仍然收到'Access-Control-Allow-Origin”错误?

Linda Hamilton
Linda Hamilton原创
2024-11-03 02:22:03696浏览

Why am I still getting an

CORS 在 PHP 中不工作

跨域资源共享 (CORS) 允许您从一个域向另一个域发出请求。当从不同的域发出请求时,浏览器会检查服务器的响应以查找指示是否允许该请求的特定标头。

问题:
开发人员正在尝试发送使用 CORS 从 www.siteone.com 到 www.sitetwo.com 的 POST 请求。然而,尽管在服务器上设置了必要的 CORS 标头,他们还是遇到了“Access-control-Allow-Origin 错误”。

请求/响应标头:

Response Headers
Connection  Keep-Alive
Content-Length  487
Content-Type    text/html; charset=iso-8859-1
Date    Fri, 23 Aug 2013 05:53:20 GMT
Keep-Alive  timeout=15, max=99
Server  Apache/2.2.15 (CentOS)
WWW-Authenticate    Basic realm="Site two Server - Restricted Area"
Request Headers
Accept  */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Length  43
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Host    www.sitetwo.com
Origin  http://www.siteone.com
Referer http://www.siteone.com/index.html
User-Agent  Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:23.0) Gecko/20100101 Firefox/23.0

解决方案:
问题在于服务器上设置 CORS 标头的方式。原始代码使用了简化的方法,仅包含以下标头:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');

但是,根据 CORS 规范,正确处理请求需要更全面的方法。开发人员将代码更新为以下内容:

if (isset($_SERVER['HTTP_ORIGIN'])) {
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400');    // cache for 1 day
}

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
        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);
}

// Your actual code goes here
echo "You have CORS!";

此更新的代码不仅设置基本的 CORS 标头,还处理预检 OPTIONS 请求,浏览器使用这些请求来确定是否允许实际请求。通过实施这种更彻底的方法,开发人员成功为其应用程序启用了 CORS。

以上是当我在 PHP 中设置 CORS 标头时,为什么仍然收到'Access-Control-Allow-Origin”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn