NGINX add_header, Hinzufügen mehrerer Header

21

Ich versuche, mehrere Header zu senden

add_header Access-Control-Allow-Origin http://dev.anuary.com;
add_header Access-Control-Allow-Origin https://dev.anuary.com;

Stattdessen macht NGINX sie jedoch zu

Access-Control-Allow-Origin: http://dev.anuary.com, https://dev.anuary.com

Was ist die Lösung?

Gajus
quelle

Antworten:

28

Ja, nginx kombiniert die gleichnamigen Header. Dies geschieht jedoch gemäß der HTTP-Spezifikation. Siehe Abschnitt 4.2 .

Der Header:

Access-Control-Allow-Origin: http://dev.anuary.com, https://dev.anuary.com

Ist gemäß der HTTP / 1.1-Spezifikation funktional äquivalent zu:

Access-Control-Allow-Origin: http://dev.anuary.com
Access-Control-Allow-Origin: https://dev.anuary.com

Wenn Sie ein System oder eine Anwendung haben, die in der Lage ist, ein Format und nicht das andere zu lesen, dann ist dies das Problem. Nginx macht es richtig.


EDIT :

Die Mozilla-Dokumentation besagt, dass es nur einen Access-Control-Allow-OriginHeader geben kann.

Die Formatierung ( siehe hier ) sollte eine durch Leerzeichen getrennte Liste von Ursprüngen sein:

add_header Access-Control-Allow-Origin "http://dev.anuary.com https://dev.anuary.com";

Aber wirklich, ich ist angeblich werden die Echo - OriginHeader vom Kunden geliefert , anstatt eine der Erzeugung aus heiterem Himmel. Dies ist wahrscheinlich angemessener:

if ($http_origin ~* "^https?://dev\.anuary\.com$" ) {
    add_header Access-Control-Allow-Origin $http_origin;
}
Shane Madden
quelle
Letzteres funktioniert nicht in FireFox 9 oder einer anderen Version. Was für ein Problem.
Gajus
1
@Guy Sollte es auch nicht. Siehe Bearbeiten.
Shane Madden
HINWEIS: Wenn die angegebene Lösung für Sie nicht funktioniert, lesen Sie dies und das . Es ist aufschlussreich, und Sie können den Grund finden, warum es nicht funktioniert.
its_me
Kann der Wert von Access-Control-Allow-Origin regexp sein?
Haxpanel
Würde es Ihnen etwas ausmachen, Ihr Beispiel auf mehrere Ursprünge auszudehnen (z. B. http://example.comund http://localhost:3000)?
Augustin Riedinger
-1

Ich hatte das gleiche Problem wie mehrere Unterdomänen in meinem Netzwerk, die versuchten, auf Ressourcen zuzugreifen, und nginxwar nicht richtig eingerichtet. Hier ist, wie ich es behoben habe.

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

Ich hoffe das hilft.

Milad Rezazadeh
quelle