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-Length
encabezado de respuesta que se proporciona también.
networking
cache
browser-cache
Brad Parks
fuente
fuente
Respuestas:
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.
fuente