跨域请求被拦截:CORS头Access-Control-Allow-Origin与http://localhost:3000不匹配
问题解决方法
你的配置存在两处错误,按下面的步骤修改即可:
- 错误添加前端请求头
Access-Control-Allow-Origin属于服务端返回的响应头,不需要前端在请求参数中主动携带。你在fetch的headers中添加这个字段后,会导致请求变为非简单请求触发CORS预检,额外增加跨域校验规则,直接删除该配置即可,修改后的前端请求代码如下:
function others(){ fetch('http://localhost:3100/',{ method: "POST", body: JSON.stringify({stat:'good'}) }) .then(function(res){ return res.json(); }) .then(function(data){ console.log(JSON.stringify( data ) ) }) }
- origin匹配规则冲突
CORS校验会严格匹配origin字符串,你3100服务配置的origin是http://localhost:3000/(末尾带斜杠),但浏览器实际发起请求时携带的Origin头是http://localhost:3000(无末尾斜杠),两者字符串不匹配就会触发校验失败,修改3100服务的cors配置即可:
app.use(cors({ origin: 'http://localhost:3000' }));
修改完成后重启两个服务,再次触发请求即可正常拿到返回数据。
内容的提问来源于stack exchange,提问作者user15573857
相关产品推荐
相关产品推荐

