为什么我的 Express.js 后端的 CORS 设置不起作用?
Why do the CORS settings for my Express.js backend not work?
我正在尝试为我的 Express.js 后端设置 CORS。由于我有前端的本地版本和远程版本,我想允许几个 URLS 访问后端。我尝试使用“*”和 var cors = require('cors') app.use(cors())
但我得到
Cannot use wildcard in Access-Control-Allow-Origin when credentials
flag is true.
我已经尝试使用 cors() 的动态设置,但是没有示例如何将它与 Express 的路由一起使用。我现在正在尝试使用下面的代码创建我自己的白名单检查,但现在我得到了
No 'Access-Control-Allow-Origin' header is present on the requested
resource. Origin 'http://localhost:5000' is therefore not allowed
access. The response had HTTP status code 500.
我做错了什么?
更新: 看起来 if 语句阻止了 headers 被添加所以我试图删除它以查看 [=13= 发生了什么] 现在给我
Credentials flag is 'true', but the 'Access-Control-Allow-Credentials'
header is ''. It must be 'true' to allow credentials.
var whiteList = {
"http://localhost:5000": true,
"https://example-url.herokuapp.com": true
};
var allowCrossDomain = function(req, res, next) {
if(whiteList[req.get('Origin')]){
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', req.get('Origin'));
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, Origin, Accept');
next();
}
};
app.use(allowCrossDomain);
这最终归结为 spelling/understanding 错误。我试图通过使用 req.headers.Origin
获取请求来源。原来 headers 里没有 'Origin',我不得不用 req.headers.origin
代替。下面的代码将起作用,并允许您为 CORS 使用多个 url,它还不能轻松处理 http://localhost:5000/route
或提供的来源不在列表中的情况。
var whiteList = {
"http://localhost:5000": true,
"https://example-url.herokuapp.com": true
};
var allowCrossDomain = function(req, res, next) {
if(whiteList[req.headers.origin]){
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, Origin, Accept');
next();
}
};
app.use(allowCrossDomain);
我正在尝试为我的 Express.js 后端设置 CORS。由于我有前端的本地版本和远程版本,我想允许几个 URLS 访问后端。我尝试使用“*”和 var cors = require('cors') app.use(cors())
但我得到
Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true.
我已经尝试使用 cors() 的动态设置,但是没有示例如何将它与 Express 的路由一起使用。我现在正在尝试使用下面的代码创建我自己的白名单检查,但现在我得到了
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:5000' is therefore not allowed access. The response had HTTP status code 500.
我做错了什么?
更新: 看起来 if 语句阻止了 headers 被添加所以我试图删除它以查看 [=13= 发生了什么] 现在给我
Credentials flag is 'true', but the 'Access-Control-Allow-Credentials' header is ''. It must be 'true' to allow credentials.
var whiteList = {
"http://localhost:5000": true,
"https://example-url.herokuapp.com": true
};
var allowCrossDomain = function(req, res, next) {
if(whiteList[req.get('Origin')]){
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', req.get('Origin'));
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, Origin, Accept');
next();
}
};
app.use(allowCrossDomain);
这最终归结为 spelling/understanding 错误。我试图通过使用 req.headers.Origin
获取请求来源。原来 headers 里没有 'Origin',我不得不用 req.headers.origin
代替。下面的代码将起作用,并允许您为 CORS 使用多个 url,它还不能轻松处理 http://localhost:5000/route
或提供的来源不在列表中的情况。
var whiteList = {
"http://localhost:5000": true,
"https://example-url.herokuapp.com": true
};
var allowCrossDomain = function(req, res, next) {
if(whiteList[req.headers.origin]){
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, Origin, Accept');
next();
}
};
app.use(allowCrossDomain);