为什么即使在添加CORS之后我仍然在http请求中获取状态代码403?

时间:2016-09-03 19:59:10

标签: angularjs node.js http xmlhttprequest

当我尝试在我的应用程序的前端在Angular中发出http请求时,我无法完成请求,因为我在预检请求中获得了状态代码403。我已经在后端的Node.js中设置了标头以允许访问,但我仍然收到GET或POST请求的错误。我也在这里阅读了一些答案,他们基本上都说将标题Access-Control-Allow-Origin设置为*,但这不起作用。

这是我的前端:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

这就是我在Express的后端做的事情:

 $http({
        method : "GET",
        url : "http://localhost:8080/v1/get-mac",
        headers: {
            'Content-Type': "application/json",
            'Authorization': "token"
        }
        }).then(function(response) {
            this.machines = response.data;
        });

我在Chrome中遇到的错误是:

app.use(function(req, res, next){
  res.header('Access-Control-Allow-Origin', "*");
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  res.header('Access-Control-Allow-Methods', 'GET, POST');
  next();
});

为什么会这样?已经尝试了很多东西,但我不知道为什么即使设置响应标题它也不起作用。感谢

这是我的app.js:

OPTIONS http://localhost:8080/v1/get-mac
  (anonymous function) @ angular.js:12011
  sendReq @ angular.js:11776
  serverRequest @ angular.js:11571
  processQueue @ angular.js:16383
  (anonymous function) @ angular.js:16399
  $eval @ angular.js:17682
  $digest @ angular.js:17495
  $apply @ angular.js:17790
  (anonymous function) @ angular.js:25890
  defaultHandlerWrapper @ angular.js:3497
  eventHandler @ angular.js:3485
XMLHttpRequest cannot load http://localhost:8080/v1/get-mac    
  Response for preflight has invalid HTTP status code 403

1 个答案:

答案 0 :(得分:-1)

服务器应发送" 200"响应OPTIONS请求。 因此,请将服务器代码修改为:

app.use(function(req, res, next){
    res.header('Access-Control-Allow-Origin', "*");
    res.header('Access-Control-Allow-Headers', 'Content-Type,     
                                               Authorization');
    res.header('Access-Control-Allow-Methods', 'GET, POST');
    if(req.method === 'OPTIONS'){
        return res.status(200)
    }
    next();
});