Как узнать, что на самом деле завершает http-ответ?

Как узнать, что на самом деле завершает http-ответ?

У меня есть веб-сервер, который обслуживает некоторые статические файлы. Иногда, когда сервер находится под большой нагрузкой, он отправляет частичные ответы со статусом HTTP 200.

Это проблема моего приложения. Почему?

  • У меня в ответе установлены заголовки кэша, которые предназначены для сохранения файла в течение длительного времени, поскольку эти файлы статичны и никогда не должны меняться.
  • Время от времени некоторые конечные пользователи получают только часть файла JavaScript со статусом HTTP 200.
  • Этот файл кэшируется браузером и нарушает работу моего приложения!

Я пробовал 2 разных веб-сервера (Jetty и Apache) и вижу, что проблема возникает с обоими, с балансировщиком нагрузки перед ними (haproxy) или без него. Это заставляет меня думать, что это не сам веб-сервер, хотя, возможно, это ожидаемое поведение для любого веб-сервера под большой нагрузкой?

Как узнать причину этой проблемы или защититься от нее?

EDIT: Эти запросы также содержат Content-Lengthзаголовок ответа.

решение1

Вам нужен пакетный захват проблемы, которая происходит. Может быть, все ваши вещи работают нормально, но у конечных пользователей глючные браузеры или они находятся за глючными веб-прокси, брандмауэрами или шлюзами NAT, которые обрезают файл.

Вы можете посмотреть, как ваши серверы / обратные прокси / балансировщики нагрузки обрабатывают заголовки Content-Length и Transfer-Encoding при обслуживании этого файла JS. Также ознакомьтесь с правилами для этих вещей вRFC 7230, раздел 3.3.2, «Длина содержимого»и некоторые из следующих разделов.

Связанный контент