为什么本地开发时请求后端接口会报CORS错误?

Tr° 怡平 阅读 7

我在本地用 Vite 启动前端项目,调用公司测试环境的 API 接口,浏览器控制台一直报 CORS 错误,说“跨源请求被阻止”。后端同事说他们已经加了 Access-Control-Allow-Origin: *,但还是不行,到底哪里出问题了?

我试过在 fetch 里加 credentials: ‘omit’,也试过换 axios,都没用。而且奇怪的是,有些接口能通,有些不行。是不是跟请求头或者方法有关?

顺便贴一下我页面里用的一小段 CSS,虽然应该没关系,但怕有影响:

.api-card {
  border: 1px solid #ddd;
  padding: 16px;
  border-radius: 8px;
  background: #f9f9f9;
  transition: box-shadow 0.2s;
}
.api-card:hover {
  box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
我来解答 赞 9 收藏
二维码
手机扫码查看
1 条解答
Prog.奕诺
我之前踩过这个坑,CORS问题确实让人头疼。首先你得明白,虽然后端设置了Access-Control-Allow-Origin: *,但这个通配符不能用于带有凭证的请求。如果你某些接口需要发送cookie或其他认证信息,这就会导致问题。

建议让后端同事检查下那些不通的接口,是不是用到了POST、PUT、DELETE这些非简单请求方法?如果是的话,他们还需要在预检请求里返回正确的响应头。特别是要加上Access-Control-Allow-Methods和Access-Control-Allow-Headers。

我自己遇到类似情况时,发现有时候问题是出在自定义请求头上面。如果你前端代码里加了一些特殊的header,后端必须显式允许这些header。

至于你说有些能通有些不行,很可能是不同接口用了不同的请求配置。可以试着把所有请求都改成最简单的GET请求,看看能不能通过。

顺便说下,你贴的那个CSS跟这个问题真没关系,别在这上面浪费时间了。要不直接找后端一起调试下具体的请求流程?这种跨域问题最好前后端配合着来解决。

最后提醒一下,开发环境可以用代理服务器来规避CORS问题,不过这只是临时方案,生产环境还得从根本上解决问题。
点赞
2026-03-26 09:01