请求的资源上不存在 'Access-Control-Allow-Origin' header
No 'Access-Control-Allow-Origin' header is present on the requested resouce
我正在编写使用 Angular 客户端和 NodeJs 后端的应用程序。
我使用 iis 和 iisnode 托管我的应用程序。
最近我在我的应用程序中添加了 windows 身份验证,这样我就可以知道哪个用户登录了。
大多数请求工作正常,但我遇到了来自另一条路由 (/manage) 但来自同一来源的请求的授权问题。
我的Angular代码:
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,我得到错误:
No 'Access-Control-Allow-Origin' header is present on the requested
resouce. Origin 'http://myurl' is therefor not allowed access.
这两个请求之间的唯一区别是第一个请求是从“http://myurl' and the second is called from 'http://myurl/manage”调用的。
虽然当我查看浏览器的网络选项卡时,我看到失败请求的来源是“http://myurl”。
为什么不显示'Access-Control-Allow-Origin',我该如何解决?
谢谢。
你可以cors做到这一点。
CORS is a node.js package for providing a Connect/Express middleware that can be used to enable CORS with various options.
1 安装 cors.
npm install cors
2 然后在您的 Express 应用程序中使用它。
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());
});
3 如果您愿意,您也可以选择将特定域列入白名单:
const whitelist = ['http://example1.com', 'http://example2.com']
const corsOptions = {
origin: function (origin, callback) {
if (whitelist.indexOf(origin) !== -1) {
callback(null, true)
} else {
callback(new Error('Not allowed by CORS'))
}
}
}
app.use(cors(corsOptions));
我正在编写使用 Angular 客户端和 NodeJs 后端的应用程序。 我使用 iis 和 iisnode 托管我的应用程序。
最近我在我的应用程序中添加了 windows 身份验证,这样我就可以知道哪个用户登录了。
大多数请求工作正常,但我遇到了来自另一条路由 (/manage) 但来自同一来源的请求的授权问题。
我的Angular代码:
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,我得到错误:
No 'Access-Control-Allow-Origin' header is present on the requested resouce. Origin 'http://myurl' is therefor not allowed access.
这两个请求之间的唯一区别是第一个请求是从“http://myurl' and the second is called from 'http://myurl/manage”调用的。 虽然当我查看浏览器的网络选项卡时,我看到失败请求的来源是“http://myurl”。
为什么不显示'Access-Control-Allow-Origin',我该如何解决? 谢谢。
你可以cors做到这一点。
CORS is a node.js package for providing a Connect/Express middleware that can be used to enable CORS with various options.
1 安装 cors.
npm install cors
2 然后在您的 Express 应用程序中使用它。
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());
});
3 如果您愿意,您也可以选择将特定域列入白名单:
const whitelist = ['http://example1.com', 'http://example2.com']
const corsOptions = {
origin: function (origin, callback) {
if (whitelist.indexOf(origin) !== -1) {
callback(null, true)
} else {
callback(new Error('Not allowed by CORS'))
}
}
}
app.use(cors(corsOptions));