NGINX add_header, adicionando vários cabeçalhos


21

Estou tentando enviar vários cabeçalhos

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

No entanto, em vez disso, o NGINX os transforma em

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

Qual a solução?

Respostas:


28

Bem, sim, o nginx está combinando os cabeçalhos nomeados de forma idêntica ... mas está fazendo isso de acordo com a especificação HTTP. Veja a seção 4.2 .

O cabeçalho:

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

É, de acordo com a especificação HTTP / 1.1, funcionalmente equivalente a:

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

Se você tem um sistema ou aplicativo capaz de ler um formato e não o outro, é esse o problema. O nginx está fazendo certo.


EDIT :

A documentação do Mozilla afirma que só pode haver um Access-Control-Allow-Origincabeçalho.

A formatação ( ver aqui ) deve ser uma lista de origens delimitada por espaço:

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

Mas, na verdade, você deveria estar ecoando o Origincabeçalho fornecido pelo cliente em vez de gerar um do nada. Provavelmente isso é mais apropriado:

if ($http_origin ~* "^https?://dev\.anuary\.com$" ) {
    add_header Access-Control-Allow-Origin $http_origin;
}

Bem, o último não funciona no FireFox 9 ou em qualquer outra versão. Que problema.
Gajus 16/01/12

11
@ Buy Nem deveria. Veja editar.
Shane Madden

NOTA: Se a solução fornecida não funcionar, leia isto e isto . É esclarecedor e você pode encontrar o motivo pelo qual não está funcionando.
its_me 28/02

O valor de Access-Control-Allow-Origin pode ser regexp?
haxpanel

Você se importaria de estender seu exemplo para várias origens (por exemplo, http://example.come http://localhost:3000)?
Augustin Riedinger


-1

Eu estava enfrentando o mesmo problema que vários subdomínios na minha rede tentando acessar recursos e nginxnão estava configurado corretamente. Aqui está como eu consertei.

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

Eu espero que isso ajude.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.