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(修复步骤)

  1. 把 Origin 改为明确域名,或使用受控回显(不要直接 *)。
  2. 用 CORS Header Generator 重新生成响应头,并确认动态场景有 Vary: Origin。
  3. 检查整段请求/响应头,若走会话鉴权再联动核验 Set-Cookie 属性。

凭据场景可用的 CORS 响应头

Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Credentials: true
Vary: Origin

FAQ

带凭据时能不能用 *?

不能,这是浏览器规范层面的硬限制。

什么时候必须加 Vary: Origin?

只要 Origin 是动态回显就必须加,避免缓存串值。