Por que um 413 não pode ser liberado para o cliente imediatamente?

6

Eu tenho meu servidor de desenvolvimento local retornando o status 413 para uploads de arquivos grandes e o cliente está recebendo esses dados imediatamente - conforme necessário.

Meu servidor remoto é a mesma versão do Nginx e mais ou menos a mesma configuração, mas o 413 nunca chega ao navegador.

Um erro indicando que os dados estão sobredimensionados aparece no log de erros imediatamente e nada aparece no log de acesso. O navegador continua a enviar os dados e, depois de 30 segundos, o status 413 aparece no log de acesso (e novamente no log de erros) e o navegador expira com um erro interno de 'redefinição de conexão'.

Quais configurações no servidor remoto podem causar esse atraso?

    
por Tim 15.02.2012 / 19:58

2 respostas

3

O problema é que a maioria dos clientes HTTP não lê a resposta até que ela tenha enviado todo o corpo da solicitação. Se você está lidando com webbrowsers você provavelmente está sem sorte aqui. A única configuração do lado do servidor que você pode fazer é definir keepalive_requests como 0 (que desabilita conexões persistentes), o que pode fazer com que o nginx feche a conexão depois de enviar o 413, que deve fazer com que o cliente pare de enviar os dados. O cliente provavelmente relatará um erro de rede em vez de 413, no entanto.

    
por 26.05.2012 / 00:31
0

Eu acho que o navegador ainda deve terminar o upload e só então receber o erro 413. A melhor maneira de verificar o tamanho do arquivo é verificá-lo no JS antes de apertar o botão de upload.

    
por 25.05.2012 / 17:39

Tags