You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求头字段Cache-Control跨域预校验不被允许问题求助

解决Request header field Cache-Control is not allowed by Access-Control-Allow-Headers的CORS错误

嘿,我来帮你搞定这个头疼的CORS问题!

首先得搞清楚为啥Postman能用,但复制代码到测试文件就报错——Postman不受浏览器同源策略限制,它不会发送CORS预检的OPTIONS请求,直接就把请求发出去了;但当你在浏览器环境或者用PHP模拟前端请求时,浏览器会先自动发一个OPTIONS预检请求,检查你的服务器是否允许这次请求里带的头信息,而你的服务器之前的配置没通过这个预检,所以就报错了。

你的问题出在Access-Control-Allow-Headers这个响应头的配置上:你写了Cache-Control,...,但省略号并没有被解析成允许所有头,服务器没明确把Cache-Control加入允许列表,所以预检就失败了。

给你两个可行的解决方案:

方案1:明确列出所有需要允许的请求头

把Access-Control-Allow-Headers里的内容补全,明确包含Cache-Control,同时加上其他可能用到的头(比如Content-Type、Authorization这些),还要记得专门处理OPTIONS预检请求:

<?php
// 先处理OPTIONS预检请求,这一步很关键!
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
    // 明确列出允许的请求头,把Cache-Control加进去
    header('Access-Control-Allow-Headers: Cache-Control, Content-Type, Authorization');
    // 缓存预检结果1天,减少重复的OPTIONS请求
    header('Access-Control-Max-Age: 86400');
    exit; // 处理完预检就直接退出,不用执行后面的业务逻辑
}

// 处理实际的业务请求
header('Access-Control-Allow-Origin: *');

// 这里写你的API逻辑代码
?>

方案2:用通配符允许所有请求头(谨慎使用)

如果你不确定会用到哪些请求头,也可以用*来允许所有头,但注意如果你的请求需要带凭证(比如Cookie),这个通配符就不生效,必须明确列出头:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
    header('Access-Control-Allow-Headers: *');
    header('Access-Control-Max-Age: 86400');
    exit;
}

header('Access-Control-Allow-Origin: *');
// 业务逻辑代码
?>

配置完之后,再测试你的请求,应该就能正常通过CORS预检,不会再报那个错误啦!

内容的提问来源于stack exchange,提问作者Raj Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:07:33