CORS 凭据 + 通配 Origin 报错:可直接落地的修复指南
专治浏览器常见 CORS 阻断:Access-Control-Allow-Credentials 与 * 组合导致请求被拒。
这是线上最常见的 CORS 事故之一。只要开启凭据模式,`Access-Control-Allow-Origin=*` 就会被浏览器直接拦截,需要改成明确域名或受控回显。
本指南涉及工具
Symptoms(现象)
- 服务端返回 200,但浏览器控制台报 CORS 错误。
- curl/Postman 正常,浏览器发起带 Cookie/Authorization 请求失败。
- 不同来源下预检结果忽好忽坏。
Root Cause(根因)
- 开启 credentials 时仍使用了通配 Origin。
- 动态回显 Origin 场景缺少 Vary: Origin,缓存错配。
- Allow-Headers/Allow-Methods 与前端真实请求不一致。
Fix Steps(修复步骤)
- 把 Origin 改为明确域名,或使用受控回显(不要直接 *)。
- 用 CORS Header Generator 重新生成响应头,并确认动态场景有 Vary: Origin。
- 检查整段请求/响应头,若走会话鉴权再联动核验 Set-Cookie 属性。
凭据场景可用的 CORS 响应头
Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Credentials: true
Vary: OriginRelated Tool Workflow
FAQ
带凭据时能不能用 *?
不能,这是浏览器规范层面的硬限制。
什么时候必须加 Vary: Origin?
只要 Origin 是动态回显就必须加,避免缓存串值。