1.会发两次请求,也能访问返回结果,但是浏览器报错;
2.浏览器报错
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.
3.Content-Type:applycation/json;
疑问:问什么允许访问还会报错
1.会发两次请求,也能访问返回结果,但是浏览器报错;
2.浏览器报错
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.
3.Content-Type:applycation/json;
疑问:问什么允许访问还会报错
exprss里是这么配置的,关键在于允许options请求以及options请求自动返回200
看你说的返回两次可能是因为post请求没达到简单请求的要求,会发送options
// cors跨域配置
app.all('*', function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With, Current-Page');
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
if (req.method == 'OPTIONS') {
res.sendStatus(200);
} else {
next();
}
});
post发送json时,浏览器会做为复杂请求处理,默认会发送一个options 请求,后台需要返回
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: Content-Type
可以看下 阮一峰的文章 http://www.ruanyifeng.com/blo...
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
3 回答11.1k 阅读
1 回答13.4k 阅读
6 回答6.3k 阅读✓ 已解决
2 回答681 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
找到的原因是这个请求不属于简单请求,会发送两次请求,一次options,一次post。 后端只在第一次请求的响应中设置了
'Access-Control-Allow-Headers'
,post请求并没有,所以拿到了值浏览器还会报错;应该在两次响应中都设置'Access-Control-Allow-Headers'