为什么我的简单请求还会被CORS拦截?
我在本地开发一个前端页面,用 fetch 向公司内网的一个 API 发起 GET 请求,明明没带自定义 header,也没用 JSON body,按理说是 simple request,应该不会触发 preflight 才对。但浏览器控制台还是报 CORS 错误,说缺少 Access-Control-Allow-Origin。
我试过加 credentials: ‘include’,也试过换不同的 Content-Type,都不行。后端同事说他们没改配置,之前是可以的。是我哪里理解错了吗?
<script>
fetch('http://192.168.1.100:8080/api/status', {
method: 'GET',
headers: {
'Accept': 'application/json'
}
})
.then(res => res.json())
.then(console.log);
</script>
这里的问题在于后端没正确处理 CORS。你需要让后端同事在响应中加入 Access-Control-Allow-Origin 头部字段,并且要匹配前端的来源,或者用 来允许所有来源(当然生产环境不推荐这样做)。如果需要带 credentials 的话,这个头部不能用 而是要明确指定源。
可以试试把代码暂时改成这样来验证问题:
不过这只是临时测试,真正解决问题还得靠后端配置。有时候明明之前没问题,可能是有代理或者中间件缓存了旧的配置导致的。记得跟后端确认他们服务器的真实响应头。