NGINX add_header, ajout de plusieurs en-têtes

21

J'essaie d'envoyer plusieurs en-têtes

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

Cependant, au lieu de cela, NGINX les transforme en

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

Quelle est la solution?

Gajus
la source

Réponses:

28

Eh bien, oui, nginx combine les en-têtes portant le même nom .. mais il le fait conformément à la spécification HTTP. Voir section 4.2 .

L'en-tête:

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

Est, selon la spécification HTTP / 1.1, fonctionnellement équivalent à:

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

Si vous avez un système ou une application capable de lire un format et non l'autre, c'est le problème. nginx le fait bien.


MODIFIER :

La documentation de Mozilla indique qu'il ne peut y avoir qu'un seul en- Access-Control-Allow-Origintête.

Le formatage de celui-ci ( voir ici ) devrait être une liste d'origines délimitée par des espaces:

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

Mais vraiment, vous êtes censé faire écho à l'en- Origintête fourni par le client au lieu d'en générer un à l'improviste. C'est probablement plus approprié:

if ($http_origin ~* "^https?://dev\.anuary\.com$" ) {
    add_header Access-Control-Allow-Origin $http_origin;
}
Shane Madden
la source
Eh bien, ce dernier ne fonctionne pas dans FireFox 9 ou dans toute autre version. Quel problème.
Gajus
1
@Guy ne devrait pas non plus. Voir modifier.
Shane Madden
REMARQUE: Si la solution donnée ne fonctionne pas pour vous, lisez ceci et ceci . C'est instructif, et vous pouvez trouver la raison pour laquelle cela ne fonctionne pas.
its_me
La valeur d'Access-Control-Allow-Origin peut-elle être regexp?
haxpanel
Pourriez-vous étendre votre exemple à plusieurs origines (par exemple, http://example.comet http://localhost:3000)?
Augustin Riedinger
-1

J'étais confronté au même problème que plusieurs sous-domaines de mon réseau essayant d'accéder aux ressources et nginxn'était pas configuré correctement. Voici comment je l'ai corrigé.

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

J'espère que ça aide.

Milad Rezazadeh
la source