为什么本地开发时请求后端接口会报CORS错误?
我在本地用 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);
}
建议让后端同事检查下那些不通的接口,是不是用到了POST、PUT、DELETE这些非简单请求方法?如果是的话,他们还需要在预检请求里返回正确的响应头。特别是要加上Access-Control-Allow-Methods和Access-Control-Allow-Headers。
我自己遇到类似情况时,发现有时候问题是出在自定义请求头上面。如果你前端代码里加了一些特殊的header,后端必须显式允许这些header。
至于你说有些能通有些不行,很可能是不同接口用了不同的请求配置。可以试着把所有请求都改成最简单的GET请求,看看能不能通过。
顺便说下,你贴的那个CSS跟这个问题真没关系,别在这上面浪费时间了。要不直接找后端一起调试下具体的请求流程?这种跨域问题最好前后端配合着来解决。
最后提醒一下,开发环境可以用代理服务器来规避CORS问题,不过这只是临时方案,生产环境还得从根本上解决问题。