Дозволити запити на поперечне походження (CORS) на Nginx для 404 відповідей


26

Я використовую Nginx для обслуговування статичних файлів у відповідь на запити CORS, використовуючи методику, викладену в цьому запитанні . Однак, коли файл не існує, відповідь 404 не містить Access-Control-Allow-Origin: *заголовка і тому блокується браузером.

Як я можу надіслати Access-Control-Allow-Origin: *404 відповіді?

Відповіді:


35

Незважаючи на те, що про це вже давно запитували, я збирав nginx з більшою кількістю модулів, але з новою версією nginx я виявив, що мені не потрібно налаштовувати nginx, все що мені потрібно було додати alwaysдирективу.

http://nginx.org/en/docs/http/ngx_http_headers_module.html

Syntax: add_header name value [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;
            }

2
alwaysбуло ключовим. Дякую, що вказали мені на це, я зійшов з розуму!
Бгонді

11

Я припускаю, що ви зараз використовуєте 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: *';
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.