Назад | Перейти на главную страницу

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

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

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

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

Ну да, 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;
}

Ознакомьтесь с этим сообщением о настройке вашего Nginx CORS с динамическими доменами: https://qa.lsproc.com/post/access-control-allow-origin-multiple-origin-domains

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

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

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