NGINX add_header, добавление нескольких заголовков


21

Я пытаюсь отправить несколько заголовков

add_header Access-Control-Allow-Origin http://dev.anuary.com;
add_header Access-Control-Allow-Origin https://dev.anuary.com;

Однако вместо этого NGINX превращает их в

Access-Control-Allow-Origin: http://dev.anuary.com, https://dev.anuary.com

Какое решение?

Ответы:


28

Ну, да, nginx объединяет заголовки с одинаковыми именами ... но делает это в соответствии со спецификацией HTTP. Смотрите раздел 4.2 .

Заголовок:

Access-Control-Allow-Origin: http://dev.anuary.com, https://dev.anuary.com

В соответствии со спецификацией HTTP / 1.1 функционально эквивалентно:

Access-Control-Allow-Origin: http://dev.anuary.com
Access-Control-Allow-Origin: https://dev.anuary.com

Если у вас есть система или приложение, способное читать один формат, а не другой, то это проблема. nginx делает все правильно.


РЕДАКТИРОВАТЬ :

Документация Mozilla гласит, что может быть только один Access-Control-Allow-Originзаголовок.

Форматирование ( см. Здесь ) должно быть разделено пробелами:

add_header Access-Control-Allow-Origin "http://dev.anuary.com https://dev.anuary.com";

Но на самом деле, вы должны повторять Originзаголовок, предоставленный клиентом, а не генерировать его на ровном месте. Это, вероятно, более уместно:

if ($http_origin ~* "^https?://dev\.anuary\.com$" ) {
    add_header Access-Control-Allow-Origin $http_origin;
}

Ну, последний не работает в FireFox 9 или любой другой версии. Какая проблема.
Гайус,

1
@ Гай И не должен. Смотрите редактировать.
Шейн Мэдден

ПРИМЕЧАНИЕ: если данное решение не работает для вас, прочитайте это и это . Это поучительно, и вы можете найти причину, по которой это не работает.
its_me

Может ли значение Access-Control-Allow-Origin быть регулярным выражением?
haxpanel

Не могли бы вы распространить свой пример на несколько источников (например, http://example.comи http://localhost:3000)?
Августин Ридингер


-1

Я столкнулся с той же проблемой, что и несколько поддоменов в моей сети, пытаясь получить доступ к ресурсам, и он nginxбыл неправильно настроен. Вот как я это исправил.

add_header Access-Control-Allow-Origin https://*.your-domain-name.com;

Надеюсь, это поможет.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.