Этот вопрос уже имеет ответ здесь:
Я пытаюсь позволить CORS в node.js, но проблема состоит в том, что я не могу установить *
кому: Access-Control-Allow-Origin
если Access-Control-Allow-Credentials
установлен.
Также спецификация сказала, что я не могу сделать, массив или запятая разделили значение для Access-Control-Allow-Origin
и предложенный метод должен был бы сделать что-то подобное этому Access-Control-Allow-Origin Несколько Доменов Источника?
Но я, может казаться, не делаю этот путь в node.js
["http://mydomain.com:9001", "http://mydomain.com:5001"].map(function(domain) {
res.setHeader( "Access-Control-Allow-Origin", domain );
});
res.header( "Access-Control-Allow-Credentials", true );
Проблема здесь состоит в том, что это - удобное переопределение последним значением в массиве, таким образом, заголовок будет установлен на res.setHeader( "Access-Control-Allow-Origin", "http://mydomain.com:5001" );
Ошибка от клиентского браузера:
XMLHttpRequest не может загрузить http://mydomain.com:9090/api/sync. 'Access-Control-Allow-Origin' заголовок имеет значение 'http://mydomain.com:5001', который не равен предоставленному источнику. Источнику 'http://mydomain.com:9001' поэтому не предоставляют доступ.
Вот то, что я использую в своем специальном приложении для разрешения нескольких источников
app.use(function(req, res, next) {
var allowedOrigins = ['http://127.0.0.1:8020', 'http://localhost:8020', 'http://127.0.0.1:9000', 'http://localhost:9000'];
var origin = req.headers.origin;
if(allowedOrigins.indexOf(origin) > -1){
res.setHeader('Access-Control-Allow-Origin', origin);
}
//res.header('Access-Control-Allow-Origin', 'http://127.0.0.1:8020');
res.header('Access-Control-Allow-Methods', 'GET, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
res.header('Access-Control-Allow-Credentials', true);
return next();
});
Не уверенный, если это к последнему, но я решил его путем установки: res.setHeader("Access-Control-Allow-Origin", req.headers.origin);
Это просто позволит каждое соединение, когда headers.origin будет отправлен с каждым запросом.
можно хотеть записать функцию, чтобы проверить, является ли req.headers.origin доменом в белом списке (от массива hardcoded) и просто возврат этот домен, если это существует в массиве.
Проверьте свой белый список по тому, чем Обладают Ваши req.headers.origin, например,
var origins = ['a.com', 'b.com', 'c.com', 'boobies.com'];
for(var i=0;i<origins.length;i++){
var origin = origins[i];
if(req.headers.origin.indexOf(origin) > -1){
res.setHeader('Access-Control-Allow-Origin', req.headers.origin);
return;
}
// else, tough cookies.
}
.
Вот простая функция промежуточного программного обеспечения для подавания корректного заголовка CORS из белого списка. При установке этой близости верхняя часть специального приложения позволит всем маршрутам устанавливать надлежащий заголовок из белого списка прежде, чем подать содержание.
app.use(function(req, res, next){
var whitelist = ['localhost:4000', 'localhost:3000', 'anydomain.com']
var host = req.get('host');
whitelist.forEach(function(val, key){
if (host.indexOf(val) > -1){
res.setHeader('Access-Control-Allow-Origin', host);
}
})
next();
});