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?

Gajus
fonte

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;
}
Shane Madden
fonte
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.

Milad Rezazadeh
fonte