Zulassen von Cross Origin Requests (CORS) auf Nginx für 404-Antworten

26

Ich verwende Nginx, um statische Dateien als Antwort auf CORS-Anforderungen mithilfe der in dieser Frage beschriebenen Technik bereitzustellen . Wenn die Datei jedoch nicht vorhanden ist, enthält die 404-Antwort nicht den Access-Control-Allow-Origin: *Header und wird daher vom Browser blockiert.

Wie kann ich Access-Control-Allow-Origin: *404-Antworten senden ?

alnorth29
quelle

Antworten:

35

Obwohl dies vor langer Zeit gefragt wurde, kompilierte ich Nginx mit mehr Modul, aber mit einer neueren Version von Nginx musste ich Nginx nicht benutzerdefiniert kompilieren. Alles, was ich brauchte, war alwaysDirektiven hinzuzufügen .

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

Syntax: add_header name value [always];

Wenn der Parameter always angegeben ist (1.7.5), wird das Header-Feld unabhängig vom Antwortcode hinzugefügt.

Also eine optimierte Version der CORS- Header:

            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;
            }
Arnoldas
quelle
2
alwayswar der Schlüssel. Danke, dass du mich darauf hingewiesen hast, ich wurde verrückt!
Donnerstag,
11

Ich gehe davon aus, dass Sie derzeit add_headerDirektive verwenden. In der Dokumentation wird darauf hingewiesen, dass hierdurch nur der Header für den Statuscode 200, 204, 301, 302 und 304 festgelegt wird. Um den Header für 404-Statuscodes festzulegen, müssen Sie die more_set_headersDirektive aus dem Modul headers_more verwenden (möglicherweise müssen Sie nginx neu kompilieren, um dieses Modul abzurufen ). Folgendes würde den Header für alle Statuscodes festlegen:

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

Sie können es auch auf bestimmte Statuscodes beschränken:

more_set_headers -s '404' 'Access-Control-Allow-Origin: *';
mgorven
quelle