¿Cómo puedo saber qué está realmente terminando una respuesta http?

0

Tengo un servidor web que sirve algunos archivos estáticos. En ocasiones, cuando el servidor está bajo 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é establecidos 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é por el navegador y rompe mi aplicación!

He probado 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 bajo una carga pesada?

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

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

Brad Parks
fuente
¿Qué tan grande es el archivo js? ¿Siempre se trunca en el mismo tamaño? ¿Puede obtener un pcap del cliente cuando sucede?
HelpingHand
Son más grandes, alrededor de 4 mb sin comprimir ... diferentes tamaños cuando también están cortados
Brad Parks

Respuestas:

0

Necesita una captura de paquetes del problema que ocurre. Podría ser que todas sus cosas funcionen bien, pero los usuarios finales tienen navegadores defectuosos o están detrás de servidores proxy, cortafuegos o puertas de enlace NAT con errores que truncan 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. También revise las reglas para estas cosas en RFC 7230 sección 3.3.2, "Contenido-Longitud" y algunas de las siguientes secciones.

Spiff
fuente