跨域后台设置了Access-Control-Allow-Origin:*,能访问到,但是浏览器会报错

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;

疑问:问什么允许访问还会报错

阅读 15.3k
4 个回答

找到的原因是这个请求不属于简单请求,会发送两次请求,一次options,一次post。 后端只在第一次请求的响应中设置了'Access-Control-Allow-Headers',post请求并没有,所以拿到了值浏览器还会报错;应该在两次响应中都设置'Access-Control-Allow-Headers'

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...

看一下是不是返回头里Access-Control-Allow-Origin有多个

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题