📢 欢迎来到万事技术论坛!本站仅讨论合法编程技术话题,严禁外挂/作弊/黑产/盗版内容,违者封号。

精华跨域 CORS 排查:预检请求与三个常见报错

yuki 进阶会员

CORS 是浏览器的保护机制——服务端其实不拦。
所以「curl 能通、前端报错」是正常现象,不是接口坏了。

简单请求 vs 预检

同时满足以下条件的才是简单请求,直接发出:

  • 方法是 GET / POST / HEAD
  • 只带安全首部(Content-Type 限于三种)

否则浏览器先发一个 OPTIONS 预检,问服务器「允许吗」。

服务端要给的响应头

Access-Control-Allow-Origin: https://你的域名
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Max-Age: 86400

带 Cookie 时还要加 Access-Control-Allow-Credentials: true,
而且此时 Allow-Origin 不能是 *,必须写具体域名。

三个最常见的报错

  1. No 'Access-Control-Allow-Origin' header → 服务端压根没配
  2. must not be the wildcard '*' → 带了凭证还用通配符
  3. Method PUT is not allowed by Access-Control-Allow-Methods → 预检过了但实际方法没放开

开发环境别开通配符

生产接口不要图省事开 *。本地用构建工具的 proxy 转发就绕开了:

server: { proxy: { '/api': 'http://localhost:8000' } }

排错技巧:打开 Network,看有没有 OPTIONS 请求,看它的响应头缺哪一个。

楼主 · 2026-09-28 14:37 · 浏览 3
lin_dev 活跃会员

补充一个高频坑:后端配了 CORS,但请求还是被拦,
八成是 Nginx 那一层把 OPTIONS 请求拦了或者没把响应头透传下去。

1楼 · 2026-09-28 14:37
登录 后即可参与回复。