Consentire richieste di origine incrociata (CORS) su Nginx per 404 risposte


26

Sto usando Nginx per servire file statici in risposta a richieste CORS usando la tecnica descritta in questa domanda . Tuttavia, quando il file non esiste, la risposta 404 non contiene l' Access-Control-Allow-Origin: *intestazione e quindi viene bloccata dal browser.

Come posso inviare Access-Control-Allow-Origin: *404 risposte?

Risposte:


35

Anche se questo è stato chiesto molto tempo fa, stavo compilando nginx con più moduli, ma con la versione più recente di nginx, ho scoperto che non dovevo compilare nginx su misura, tutto ciò di cui avevo bisogno era aggiungere alwaysdirettiva.

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

Syntax: add_header name value [always];

Se viene specificato il parametro always (1.7.5), il campo di intestazione verrà aggiunto indipendentemente dal codice di risposta.

Quindi una versione sintonizzata delle intestazioni 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
alwaysera la chiave. Grazie per avermelo fatto notare, stavo diventando matto!
bgondy,

11

Presumo che tu stia attualmente utilizzando la add_headerdirettiva. La documentazione rileva che questo imposta solo l'intestazione per il codice di stato 200, 204, 301, 302 e 304. Per impostare l'intestazione per i codici di stato 404 è necessario utilizzare la more_set_headersdirettiva dal modulo headers_more (potrebbe essere necessario ricompilare nginx per ottenere questo modulo). Quanto segue imposta l'intestazione per tutti i codici di stato:

more_set_headers 'Access-Control-Allow-Origin: *';

Puoi anche limitarlo a codici di stato specifici:

more_set_headers -s '404' 'Access-Control-Allow-Origin: *';
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.