Разрешить несколько доменов CORS в express js
как разрешить несколько доменов для CORS в express упрощенным способом.
Я
cors: {
origin: "www.one.com";
}
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", cors.origin);
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
это работает, когда есть только один домен, упомянутый в origin
но если я хочу иметь origin
как массив доменов, и я хочу разрешить CORS для всех доменов в массиве origin, у меня было бы что - то вроде этого -
cors: {
origin: ["www.one.com","www.two.com","www.three.com"];
}
но тогда проблема в том, что этот код ниже не будет работать -
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", cors.origin);
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
как сделать res.header
возьмите массив доменов через cors.origin
?
3 ответов
Я бы рекомендовал cors-модуль:https://www.npmjs.org/package/cors Он делает такие вещи для вас-проверьте "настройка CORS w / Dynamic Origin"-раздел
позволяет понять, как работает этот заголовок. "Access-Control-Allow-Origin" принимает только строку. Поэтому, чтобы сделать его динамическим, вам нужно получить запрашивающий хост из заголовка http. Проверьте его на соответствие вашему массиву авторизованных доменов. Если он присутствует, добавьте его в качестве значения в заголовок, иначе добавление значения по умолчанию запретит несанкционированным доменам доступ к API.
для этого нет собственной реализации. Вы можете сделать это самостоятельно, используя приведенный ниже код.
cors: {
origin: ["www.one.com","www.two.com","www.three.com"],
default: "www.one.com"
}
app.all('*', function(req, res, next) {
var origin = cors.origin.indexOf(req.header('host').toLowerCase()) > -1 ? req.headers.origin : cors.default;
res.header("Access-Control-Allow-Origin", origin);
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
фактически, заголовок Access-Control-Allow-Origin должен иметь то же значение, что и заголовок Origin, если вы хотите разрешить его.
поэтому база на вашем коде просто
cors: {
origin: ["www.one.com","www.two.com","www.three.com"]
}
app.all('*', function(req, res, next) {
let origin = req.headers.origin;
if(cors.origin.indexOf(origin) >= 0){
res.header("Access-Control-Allow-Origin", origin);
}
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});