¿Cómo puedo saber qué es lo que realmente finaliza una respuesta http?

¿Cómo puedo saber qué es lo que realmente finaliza una respuesta http?

Tengo un servidor web que sirve algunos archivos estáticos. En momentos en que el servidor tiene una gran carga, envía respuestas parciales con un estado HTTP 200.

Este es un problema para mi aplicación. ¿Por qué?

  • Tengo encabezados de caché configurados en la respuesta que están destinados a mantener el archivo durante mucho tiempo, ya que estos archivos son estáticos y nunca deberían cambiar.
  • De vez en cuando, algunos usuarios finales obtienen solo una parte de un archivo javascript, con un estado HTTP de 200.
  • ¡Este archivo se almacena en caché en el navegador y daña mi aplicación!

Probé 2 servidores web diferentes (Jetty y Apache) y veo que el problema ocurre con ambos, con o sin un equilibrador de carga frente a ellos (haproxy). Esto me hace pensar que no es el servidor web en sí, aunque tal vez este sea el comportamiento esperado para cualquier servidor web con una carga pesada.

¿Cómo puedo saber qué está causando este problema o protegerme contra él?

EDITAR: Estas solicitudes también tienen un Content-Lengthencabezado de respuesta.

Respuesta1

Necesita una captura de paquete del problema que está ocurriendo. Podría ser que todo su material esté funcionando bien, pero los usuarios finales tienen navegadores con errores o están detrás de servidores proxy web, firewalls o puertas de enlace NAT con errores que están truncando el archivo.

Es posible que desee ver cómo sus servidores/proxies inversos/equilibradores de carga manejan los encabezados Content-Length y Transfer-Encoding cuando sirven ese archivo JS. Revise también las reglas para estas cosas enRFC 7230 sección 3.3.2, "Longitud del contenido"y algunas de las siguientes secciones.

información relacionada