Permitindo solicitações de origem cruzada (CORS) no Nginx para 404 respostas

23

Estou usando o Nginx para fornecer arquivos estáticos em resposta a solicitações de CORS usando a técnica descrita em esta questão . No entanto, quando o arquivo não existe, a resposta 404 não contém o cabeçalho Access-Control-Allow-Origin: * e, portanto, é bloqueada pelo navegador.

Como posso enviar Access-Control-Allow-Origin: * em respostas 404?

    
por alnorth29 29.05.2012 / 11:15

2 respostas

30

Mesmo que isso tenha sido perguntado há muito tempo, eu estava compilando o nginx com mais módulos, mas com uma versão mais nova do nginx, descobri que não preciso compilar nginx customizado, tudo que eu precisava era adicionar always directive. / p>

link

Syntax: add_header name value [always];

Se o parâmetro always for especificado (1.7.5), o campo de cabeçalho será adicionado independentemente do código de resposta.

Portanto, uma versão ajustada dos cabeçalhos CORS :

            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;
            }
    
por 22.06.2015 / 13:37
8

Suponho que você esteja usando a diretiva add_header . A documentação observa que isso define apenas o cabeçalho para o código de status 200, 204, 301, 302 e 304. Para definir o cabeçalho dos códigos de status 404, você precisará usar a diretiva more_set_headers do headers_more module (talvez seja necessário recompilar o nginx para obter este módulo). O seguinte definiria o cabeçalho para todos os códigos de status:

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

Você também pode restringi-lo a códigos de status específicos:

more_set_headers -s '404' 'Access-Control-Allow-Origin: *';
    
por 30.05.2012 / 01:05