Назад | Перейти на главную страницу

запросы Chrome застревают в ожидании

Описание проблемы

У нас есть веб-сервер, обслуживающий статические ресурсы. У нас возникла проблема, когда после просмотра некоторые HTTP-запросы застревают в состоянии ожидания. В инспекторе Chrome заголовки ответов делать вернуться, но запросы не истекают по времени и выглядят так, как будто они загружаются. На временной шкале «Ожидание (ttfb)» - это последний заполненный элемент (например, 400 мс), а затем есть примечание «ВНИМАНИЕ: запрос еще не завершен!»

Эта проблема, по-видимому, ограничивается хромом и когда сайт работает по https. Мы не можем воспроизводить на safari, ff, т.е. мы не можем воспроизводить, если https отключен.

Репро. предпринятые шаги

  1. открыть хром инкогнито
  2. открыть инструменты инспектора> вкладка сеть
  3. перейти на сайт
  4. обычно первая страница и все ее запросы заканчиваются
  5. перейти на другую страницу
  6. неожиданное поведение: не загружаются части страницы; xhr запрашивает файлы .html и обычно изображения jpg. При осмотре на вкладке сети Chrome они говорят "ожидает рассмотрения"

Странное примечание:

  1. после выполнения описанных выше действий, если вы откроете "ожидающий" запрос в новой вкладке, вкладка "вращается"
  2. если вы закроете первую вкладку, вторая вкладка с "ожидающим" URL разрешится, это заставит нас изучить сохранение активности и таймауты, но безрезультатно.
  3. Эта полная проблема может иногда проявляться и при самом первом запросе (документ)

Примечания по окружающей среде:

Основываясь на этих проблемах, ошибка выглядит как некоторая проблема конфигурации сервера, мы не думаем, что она связана с сертификатом, но тот факт, что она влияет только на хром, действительно странный.

Тонны информации по этой или подобной проблеме, и ни одно из решений не помогло мне. Итак, покопавшись - вот оно, Добавить в ответ сервера заголовки ['Соединение'] = 'закрыть'

Рассматривать 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 КБ / с), он должен ошибаться при попытке проанализировать трафик или определить, следует ли разрешить соединение. Затем туда и обратно с поддержкой, чтобы попытаться исправить это или найти настройки, в которых этого не происходит.