
У меня есть веб-сервер, который обслуживает некоторые статические файлы. Иногда, когда сервер находится под большой нагрузкой, он отправляет частичные ответы со статусом HTTP 200.
Это проблема моего приложения. Почему?
- У меня в ответе установлены заголовки кэша, которые предназначены для сохранения файла в течение длительного времени, поскольку эти файлы статичны и никогда не должны меняться.
- Время от времени некоторые конечные пользователи получают только часть файла JavaScript со статусом HTTP 200.
- Этот файл кэшируется браузером и нарушает работу моего приложения!
Я пробовал 2 разных веб-сервера (Jetty и Apache) и вижу, что проблема возникает с обоими, с балансировщиком нагрузки перед ними (haproxy) или без него. Это заставляет меня думать, что это не сам веб-сервер, хотя, возможно, это ожидаемое поведение для любого веб-сервера под большой нагрузкой?
Как узнать причину этой проблемы или защититься от нее?
EDIT: Эти запросы также содержат Content-Length
заголовок ответа.
решение1
Вам нужен пакетный захват проблемы, которая происходит. Может быть, все ваши вещи работают нормально, но у конечных пользователей глючные браузеры или они находятся за глючными веб-прокси, брандмауэрами или шлюзами NAT, которые обрезают файл.
Вы можете посмотреть, как ваши серверы / обратные прокси / балансировщики нагрузки обрабатывают заголовки Content-Length и Transfer-Encoding при обслуживании этого файла JS. Также ознакомьтесь с правилами для этих вещей вRFC 7230, раздел 3.3.2, «Длина содержимого»и некоторые из следующих разделов.