首页 > web前端 > js教程 > 如何在 PHP 中正确配置 CORS 标头以避免跨域请求错误?

如何在 PHP 中正确配置 CORS 标头以避免跨域请求错误?

Mary-Kate Olsen
发布: 2024-12-16 06:15:16
原创
250 人浏览过

How Can I Properly Configure CORS Headers in PHP to Avoid Cross-Origin Request Errors?

跨源请求标头 (CORS) 与 PHP 标头

了解 CORS

跨源请求共享 (CORS) 是一种机制,允许浏览器可以安全地发出跨域 HTTP 请求,从而实现不同域或子域之间的通信。此机制有助于防止未经授权的资源访问,确保数据隐私和安全。

带有示例标头的 CORS 流程

为了演示 CORS 流程,让我们考虑一个简化的 PHP 脚本:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *");
登录后复制

此脚本允许来自任何来源和任何标头的跨源请求。但是,在某些情况下,您可能会遇到如下错误消息:

Request header field X-Requested-With is not allowed by Access-Control-Allow-Headers
登录后复制

解决错误

要正确处理 CORS 请求,您需要显式指定允许的标头。正确响应 CORS 请求的更全面的函数是:

function 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');
    }

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

    echo "You have CORS!";
}
登录后复制

安全说明

1.验证 HTTP_ORIGIN:
当您收到 HTTP_ORIGIN 标头时,请务必在允许请求之前将其与已批准来源的白名单进行检查。

2. X-Requested-With 验证:
上面的脚本允许任何标头,包括 X-Requested-With。这也应该得到验证,尤其是在生产环境中。

3.阅读 CORS 规范:
要全面了解 CORS,请参考官方规范:

  • [HTTP 访问控制](https://developer.mozilla.org/en /HTTP_access_control)
  • [获取标准](https://fetch.spec.whatwg.org/#http-cors-protocol)

TL;DR

  • CORS 支持跨源 HTTP 请求通过修改浏览器的安全策略。
  • 响应CORS请求时,必须设置Access-Control-Allow-Origin header。
  • 使用 Access-Control-Allow-Headers 显式指定允许的标头。
  • 出于安全原因,始终验证 HTTP_ORIGIN 和其他相关标头。

以上是如何在 PHP 中正确配置 CORS 标头以避免跨域请求错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板