У нас есть веб-сервер, обслуживающий статические ресурсы. У нас возникла проблема, когда после просмотра некоторые HTTP-запросы застревают в состоянии ожидания. В инспекторе Chrome заголовки ответов делать вернуться, но запросы не истекают по времени и выглядят так, как будто они загружаются. На временной шкале «Ожидание (ttfb)» - это последний заполненный элемент (например, 400 мс), а затем есть примечание «ВНИМАНИЕ: запрос еще не завершен!»
Эта проблема, по-видимому, ограничивается хромом и когда сайт работает по https. Мы не можем воспроизводить на safari, ff, т.е. мы не можем воспроизводить, если https отключен.
Странное примечание:
nginx версии 1.9.3
# some variables we've tweaked
worker_processes 4;
worker_connections 4000;
keepalive_timeout 15;
client_body_timeout 12;
gzip on
логи nginx ни на что не жалуются
Основываясь на этих проблемах, ошибка выглядит как некоторая проблема конфигурации сервера, мы не думаем, что она связана с сертификатом, но тот факт, что она влияет только на хром, действительно странный.
Тонны информации по этой или подобной проблеме, и ни одно из решений не помогло мне. Итак, покопавшись - вот оно, Добавить в ответ сервера заголовки ['Соединение'] = 'закрыть'
Рассматривать wireshark
и инструменты разработчика Chrome для анализа сетевого трафика.
Откройте сетевой отладчик в Chrome и попробуйте воспроизвести зависший запрос. Он покажет вам точную временную шкалу: когда заголовки запроса были полностью отправлены, содержимое запроса отправлено, ожидает ответа, заголовки ответов полностью получены, первый байт полученного контента, последний байт контента (если он когда-либо завершился).
Важно определить, на какой стадии проблема?
Если это вначале, веб-сервер никогда не получал запрос, возможно, изначально было невозможно установить соединение.
Если он застрял в ожидании конца контента, это означает, что веб-сервер полностью получил и обработал запрос, вы должны увидеть запрос в журнале веб-сервера, с кодом состояния, возможно, ошибкой?
Я встречал много реальных вещей, которые нарушают реакцию или замедляют переход к ползанию.
Агрессивное формирование трафика. Пришлось работать в одном офисе в Лондоне, общаясь с азиатскими серверами. Первый МБ ответа приходит нормально, затем скорость передачи ограничивается 20 КБ / с. Он не сломан, он просто невероятно медленный.
Проблемы с прокси, особенно с прокси MITM. Они могут разорвать связи или удержаться без особых причин. Раньше у меня был полный прокси-сервер MITM, когда я работал в банке, для открытия Google.com иногда без причины требовалось 5 минут, так что раздражает, но в остальных 99% случаев работал нормально.
Проблемы HTTP / 2 (ранее SPDY) и TLS 1.3. Верьте мне или нет, но они были чертовски глючными в первые годы выпуска (по состоянию на 2020 год все еще есть крайние случаи). Любой разработчик должен понимать, что ни один код не может быть идеальным с первого раза, на устранение ошибок и крайних случаев требуется время. К сожалению, этот материал действительно должен отлично работать в разных системах (браузеры, балансировщики нагрузки, веб-серверы и т. Д.). Поверьте, вы не хотите быть одним из первых, кто внедряет новые протоколы, когда у вас есть десятки или сотни приложений, которыми нужно управлять (в паре разных стеков) в организации.
Ошибки Chrome. В Chrome есть ошибки, как и в любом сложном программном обеспечении, тем более, что он движется быстро и часто намеренно запихивает вам в глотку. Я мог бы повторить HTTP / 2 в качестве примера. Chrome реализован первым, и, конечно, первая попытка не идеальна, поэтому здесь есть некоторые ошибки. Chrome также первым включил его по умолчанию, и, конечно же, это вызывает всплывающее окно с любой несовместимостью, и вы не можете избежать ее. При возникновении странных проблем попробуйте использовать предыдущую / следующую версию Chrome или другой браузер.
Антивирусная программа. Антивирус фильтрует все соединения и весь входящий и исходящий трафик с компьютера. Они перехватывают все сетевые системные вызовы, если вы не знаете, как работает антивирус Windows. Они небезупречны и могут очень плохо разрывать связи. Я могу сказать вам, что трачу много времени на отладку проблемы, затрагивающей несколько сотрудников, одно программное обеспечение загружает конфигурацию через HTTP, что должно занять 1 секунду, но для них это занимает от 10 минут до 2 часов. Мы обнаружили, что проблема заключается в том, что антивирус Symantec прерывает соединение (1 КБ / с), он должен ошибаться при попытке проанализировать трафик или определить, следует ли разрешить соединение. Затем туда и обратно с поддержкой, чтобы попытаться исправить это или найти настройки, в которых этого не происходит.