请求的资源上不存在“Access-Control-Allow-Origin”标头

问题描述 投票:1回答:1

我正在编写应用程序,它将Angular用于客户端,NodeJs用于后端。我用iis和iisnode托管我的应用程序。

最近我在我的应用程序中添加了Windows身份验证,因此我可以知道登录的用户。

大多数请求工作正常,但我得到授权问题的请求,从另一条路径(/ manage),但来自同一个来源。

我的角色代码:

var url = "http://localhost:15001/auth/"+entredPass;
this.http.get(url, {withCredentials: true}).subscribe(res => {
    ...
});

我的NodeJs代码:

var app = express();
var allowCrossDomain = function (req, res, next){
    res.header('Access-Control-Allow-Origin', origin); //Gets that from config
    res.header('Access-Control-Allow-Credentials', true);
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');

    if(res.method == 'OPTIONS')
        res.send(200);
    else
        next();
}
app.use(allowCrossDomain);

//This request works
app.get('isAlive', function(req, res){
    res.setHeader('Access-Control-Allow-Origin', origin); //Gets that from config
    res.status(200);
    res.send(true);
});

//This one isn't - why?
app.get('/auth/:password', function (req, res){
    ...
    var authRes = false;
    if (password == "123456")
        authRes = true;

    res.setHeader('Access-Control-Allow-Origin', origin);
    res.status(200);
    res.send(authRes.toString());
});

对于第二个GET我得到错误:

请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,'qazxsw poi'原产地不允许进入。

这两个请求之间的唯一区别是第一个从'http://myurl'调用,第二个从'http://myurl'调用。虽然当我在浏览器中查看网络选项卡时,我发现失败请求的来源是'http://myurl/manage'。

为什么没有提供“Access-Control-Allow-Origin”,我该如何解决?谢谢。

node.js angular express iis iisnode
1个回答
1
投票

你可以http://myurl这样做。

CORS是一个node.js包,用于提供Connect / Express中间件,可用于启用具有各种选项的CORS。

1安装cors

cors

2然后在Express App中使用它。

npm install cors

3(可选)如果您要执行以下操作,还可以将特定域列入白名单:

const express = require('express');
const cors = require('cors');
const app = express();

app.use(cors());

//This request works
app.get('isAlive', function(req, res) {
  res.setHeader('Access-Control-Allow-Origin', origin); //Gets that from config
  res.status(200);
  res.send(true);
});

//This one isn't - why?
app.get('/auth/:password', function(req, res) {
  ...
  var authRes = false;
  if (password == "123456")
    authRes = true;

  res.setHeader('Access-Control-Allow-Origin', origin);
  res.status(200);
  res.send(authRes.toString());
});
© www.soinside.com 2019 - 2024. All rights reserved.