Я использую Nginx для обслуживания статических файлов в ответ на запросы CORS, используя технику, описанную в этот вопрос. Однако, если файл не существует, ответ 404 не содержит Access-Control-Allow-Origin: *
заголовок и поэтому блокируется браузером.
Как я могу отправить Access-Control-Allow-Origin: *
по 404 отзывам?
Несмотря на то, что об этом спрашивали давно, я компилировал nginx с дополнительным модулем, но с более новой версией nginx я обнаружил, что мне не нужно настраивать nginx на заказ, все, что мне нужно, это добавить always
директива.
http://nginx.org/en/docs/http/ngx_http_headers_module.html
Syntax: add_header name value [always];
Если указан параметр always (1.7.5), поле заголовка будет добавлено независимо от кода ответа.
Настроенная версия CORS заголовки:
if ($cors = "trueget") {
# Tells the browser this origin may make cross-origin requests
# (Here, we echo the requesting origin, which matched the whitelist.)
add_header 'Access-Control-Allow-Origin' "$http_origin" always;
# Tells the browser it may show the response, when XmlHttpRequest.withCredentials=true.
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
Я предполагаю, что вы сейчас используете add_header
директива. В документации отмечается, что это устанавливает заголовок только для кода состояния 200, 204, 301, 302 и 304. Чтобы установить заголовок для кодов состояния 404, вам необходимо использовать more_set_headers
директива от headers_more модуль (вам может потребоваться перекомпилировать nginx, чтобы получить этот модуль). Следующее будет устанавливать заголовок для всех кодов состояния:
more_set_headers 'Access-Control-Allow-Origin: *';
Вы также можете ограничить его определенными кодами состояния:
more_set_headers -s '404' 'Access-Control-Allow-Origin: *';