angularjs - 为什么即使添加 CORS 后,我仍然在 http 请求中收到状态代码 403?

标签 angularjs node.js http xmlhttprequest

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

这是我的前端:

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

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

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();
});

我在 Chrome 中遇到的错误是:

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

为什么会发生这种情况?已经尝试了很多东西,但我不知道为什么即使设置了响应头它也不起作用。谢谢

这是我的 app.js:

var server = require(__dirname + '/server.js')();

var app = server.app.express();

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.use(server.app.express.static(server.app.path.join(__dirname, 'views')));
app.use(server.app.morgan('dev'));
app.engine('html', server.app.ejs.renderFile);
app.set('view engine', 'ejs');
app.use(server.app.methodOverride());
app.use(server.app.bodyParser.urlencoded({ extended: false }));
app.use(server.app.bodyParser.json());

server.router(app);

return server.app.http.createServer(app).listen(process.env.PORT || 8080, function() {
  console.log("Server is on, listening on: 8080");
});

最佳答案

服务器应该向 OPTIONS 请求发送“200”响应。 因此将您的服务器代码修改为:

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();
});

关于angularjs - 为什么即使添加 CORS 后,我仍然在 http 请求中收到状态代码 403?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39310838/

相关文章:

javascript - Bootstrap 模态 Protractor 测试

javascript - Angularjs - 在嵌套的 ng-repeaters 中,你如何在嵌套的转发器中获取外部转发器项目的索引

http - 如果请求在 http.Server 中超时,为什么在 Firefox 中会无限期地重复?

angularjs - 当主 Controller 发生变化时,mddialog textarea 模型不会更新

java - 我可以将 servlet 与 Angular JS 结合使用并实现 MVC 架构吗?

javascript - null == 0 在函数中返回 true

node.js - 找不到模块 'prettier'

node.js - 使用 apt-get Node 安装 Ubuntu 14 Nodejs 无法在控制台中运行

php - 判断 HTTP 客户端是否断开连接

http - 如何使用空用户代理发送请求?