Como posso saber o que realmente está encerrando uma resposta http?

Como posso saber o que realmente está encerrando uma resposta http?

Eu tenho um servidor web que está servindo alguns arquivos estáticos. Às vezes, quando o servidor está sob carga pesada, ele envia respostas parciais com status HTTP 200.

Este é um problema para meu aplicativo. Por que?

  • Eu tenho cabeçalhos de cache definidos na resposta que têm como objetivo manter o arquivo por um longo tempo, já que esses arquivos são estáticos e nunca devem ser alterados.
  • De vez em quando, alguns usuários finais obtêm apenas parte de um arquivo javascript, com status HTTP de 200.
  • Este arquivo é armazenado em cache pelo navegador e quebra meu aplicativo!

Eu tentei 2 servidores web diferentes (Jetty e Apache) e vi o problema acontecendo com ambos, com ou sem um balanceador de carga na frente deles (haproxy). Isso me faz pensar que não é o servidor web em si, embora talvez esse seja o comportamento esperado para qualquer servidor web sob carga pesada.

Como posso descobrir o que está causando esse problema ou me proteger contra ele?

EDIT: Essas solicitações também têm um Content-Lengthcabeçalho de resposta fornecido.

Responder1

Você precisa de uma captura de pacote do problema que está acontecendo. Pode ser que todas as suas coisas estejam funcionando bem, mas os usuários finais tenham navegadores com bugs ou estejam atrás de proxies da web, firewalls ou gateways NAT com bugs que estão truncando o arquivo.

Você pode querer ver como seus servidores/proxies reversos/balanceadores de carga estão lidando com os cabeçalhos Content-Length e Transfer-Encoding ao servir esse arquivo JS. Revise também as regras para essas coisas emRFC 7230 seção 3.3.2, "Comprimento do conteúdo"e algumas das seções a seguir.

informação relacionada