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 不能是 *,必须写具体域名。
三个最常见的报错
No 'Access-Control-Allow-Origin' header→ 服务端压根没配must not be the wildcard '*'→ 带了凭证还用通配符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

