Иногда вместо привычной страницы сайт внезапно встречает вас сухой подписью ERR_HTTP2_PROTOCOL_ERROR. Без пояснений, без нормального текста об ошибке, просто набор символов, который раздражает сильнее чем любой баннер. Браузер намекает, что проблема связана с протоколом HTTP2, но что именно пошло не так, не объясняет. В результате обычный пользователь винит интернет, админ грешит на хостинг, а разработчик подозревает свой код.
Хорошая новость в том, что сама ошибка не звучит как приговор. Это всего лишь общий сигнал, что в каком-то месте цепочки клиент - сеть - сервер нарушены правила общения по HTTP2. Плохая новость в том, что причин у ERR_HTTP2_PROTOCOL_ERROR много, и не всегда понятно, виноват ли браузер, сервер, прокси, антивирус или чей-нибудь чрезмерно умный кеш.
В этом разборе разложим по полочкам, что скрывается за ERR_HTTP2_PROTOCOL_ERROR, какие бывают типовые причины и что можно сделать, если ошибка достала уже и пользователей, и техподдержку.
Что такое ERR_HTTP2_PROTOCOL_ERROR и как она выглядит в браузере
Современные браузеры активно используют HTTP2, чтобы загружать сайты быстрее. Вместо последовательных запросов как в старом HTTP1, данные идут по одному зашифрованному соединению потоками, с приоритизацией и сжатиями заголовков. По идее, работает это красиво и экономно, пока одна из сторон не нарушает правила игры.
ERR_HTTP2_PROTOCOL_ERROR как раз и означает, что браузер получил от сервера некорректный набор кадров HTTP2 или сам отправил что-то, что не укладывается в спецификацию. Например, пришел неожиданный тип кадра, нарушен порядок, не совпадает заявленный размер тела ответа с реальным содержимым или прилетели слишком большие заголовки. Браузер в таком случае предпочитает оборвать соединение, показать пользователю ERR_HTTP2_PROTOCOL_ERROR и забыть об инциденте.
Чаще всего такая надпись встречается в Chrome и других браузерах на основе Chromium. При этом в интерфейсе пользователь видит просто сообщение о невозможности загрузить страницу, а уточнение ERR_HTTP2_PROTOCOL_ERROR спрятано в технических деталях. Внешне все выглядит как обычный сетевой сбой хотя формально это нарушение правил протокола.
Дополнительно ситуацию запутывает то, что одна и та же страница может работать у одних пользователей и падать с ERR_HTTP2_PROTOCOL_ERROR у других. Многое зависит от того, какой путь проходят пакеты, какие прокси и фильтры стоят по дороге, какой именно браузер и версия используются и даже включен ли у человека антивирус с проверкой трафика HTTPS.
Поэтому важно относиться к ERR_HTTP2_PROTOCOL_ERROR не как к единственной конкретной ошибке, а как к симптомам целого класса проблем с реализацией HTTP2 где-то на маршруте.
Типичные причины ERR_HTTP2_PROTOCOL_ERROR
Если обобщить реальные кейсы, чаще всего причина сидит на стороне сервера или промежуточных узлов, а не у конечного пользователя. При этом браузер не знает подробностей, он видит только некорректный протокольный диалог и пишет ERR_HTTP2_PROTOCOL_ERROR. Ниже основные группы причин, которые стоит проверить в первую очередь.
Первая группа проблем связана с самим веб-сервером и его поддержкой HTTP2. Некорректные патчи, экспериментальные модули, старая сборка Nginx или Apache, конфликт расширений, ошибки в обработчиках заголовков и тела ответа все это может приводить к тому, что сервер создает неправильные HTTP2 кадры. На HTTP1 такой сайт еще может кое-как жить, а при включении HTTP2 начинает сыпаться непредсказуемыми ошибками.
Вторая частая причина это связка обратного прокси, балансировщика и приложения. Один сервер отдает ответ, другой переписывает заголовки, третий сжимает или кеширует, где-то теряется часть данных или меняется значение Content Length. В результате до браузера доезжает поток, который формально нарушает протокол. Особенно часто такое происходит при сложных конфигурациях с несколькими уровнями прокси и CDN.
Третья категория виновников это фильтрующие устройства и антивирусы, которые умеют вскрывать и анализировать HTTPS. Корпоративные межсетевые экраны, контентные фильтры, антивирусные пакеты с проверкой TLS иногда не до конца корректно собирают и пересобирают HTTP2 трафик. Браузер воспринимает это как ошибку протокола и показывает ERR_HTTP2_PROTOCOL_ERROR, хотя сайт сам по себе настроен правильно.
Наконец, не стоит забывать и о локальных проблемах. Поврежденный кеш, сломанные временные файлы браузера, конфликт расширений особенно тех, которые вмешиваются в трафик вроде блокировщиков рекламы или VPN тоже могут привести к некорректному завершению HTTP2 соединения. Это менее частый сценарий, но он встречается и заставляет пользователей искать ответ на запрос ERR_HTTP2_PROTOCOL_ERROR причина именно на своей стороне.
Как отличить проблему сервера от проблемы клиента
Первая задача и для пользователя, и для администратора понять, где искать причину ошибки. Полезный базовый тест попробовать открыть тот же адрес в другом браузере или на другом устройстве в той же сети. Если с телефона по мобильному интернету страница работает, а с компьютера по Wi Fi падает с ERR_HTTP2_PROTOCOL_ERROR, почти наверняка проблема в клиентской части или промежуточных фильтрах.
Хороший следующий шаг приватный режим или запуск браузера без расширений. Если в обычном режиме сайт не открывается, а в режиме инкогнито работает, имеет смысл временно отключить блокировщики рекламы, расширения VPN и все плагины, которые перехватывают сетевые запросы. Иногда достаточно удалить одно старое расширение, чтобы ERR_HTTP2_PROTOCOL_ERROR исчезла как будто ее и не было.
Если есть подозрение на локальный сбой, помогает очистка кеша и перезапуск браузера. В некоторых случаях помогает полное удаление профиля пользователя с повторной авторизацией. Это радикальный шаг, но при поврежденных индексах или базах данных кеша он действительно может решить проблему.
Когда же ошибка воспроизводится на разных устройствах, в разных браузерах и у разных пользователей, фокус смещается на сторону сервера. Администраторам здесь пригодятся инструменты вроде curl с параметром http2, журнал ошибок веб-сервера, логи балансировщика и CDN. Если при запросе через curl сервер сам закрывает соединение с ошибкой протокола, это уже честный серверный баг, а не каприз браузера.
Дополнительно можно временно отключить HTTP2 в настройках веб-сервера и посмотреть, исчезнет ли ошибка при работе по HTTP1. Если сайт начинает открываться стабильно, значит проблема точно связана с реализацией HTTP2 или теми узлами, которые переписывают HTTP2 трафик по дороге.
Что может сделать обычный пользователь
Если вы не администрируете сайт, а просто хотите в него попасть, от полной внутренней диагностики HTTP2 протокола пользы немного. Но есть набор шагов, которые действительно помогают отсеять локальные причины и иногда обходят проблему, пока админы на той стороне все чинят.
Для начала стоит обновить страницу, перезапустить браузер и по возможности проверить сайт в другом браузере. Банальный совет, но при временных сбоях с сетью или кешем этого бывает достаточно. Если ошибка повторяется, имеет смысл очистить кеш и cookies именно для проблемного сайта, а не для всех ресурсов сразу.
Следующий шаг временно отключить расширения, которые вмешиваются в сетевой трафик. Классический набор подозреваемых это блокировщики рекламы, инструменты для изменения заголовков, прокси и VPN. Иногда удобно просто включить режим инкогнито, он по умолчанию запускается без большинства дополнений, и проверить, пропадет ли ERR_HTTP2_PROTOCOL_ERROR.
Если вы используете антивирус с функцией проверки HTTPS или корпоративный прокси в офисе, можно попробовать подключиться к сайту через мобильный интернет, раздавая его с телефона. Если по мобильному все работает, а через рабочую сеть нет, значит корень проблемы почти точно в прокси или фильтрующем устройстве.
И наконец, если речь идет о важном сервисе, полезно отправить в техподдержку скриншот с ERR_HTTP2_PROTOCOL_ERROR, указать браузер и примерное время появления ошибки. Администраторам это сильно упрощает поиск в журналах, а вам повышает шанс, что именно вашу ситуацию воспроизведут и исправят.
Что проверять администратору сайта и разработчику
Для тех, кто отвечает за работу сайта, ERR_HTTP2_PROTOCOL_ERROR хороший повод внимательно посмотреть на стек от приложения до сети. Базовый шаг убедиться, что используется актуальная версия веб-сервера с корректной поддержкой HTTP2. Старые сборки, экзотические патчи и сомнительные модули для сжатия или переписывания заголовков зачастую проявляют себя именно при высокой нагрузке и только по HTTP2.
Дальше имеет смысл включить более подробный лог для HTTP2. Многие серверы позволяют записывать информацию о типах кадров, неожиданных флагах и причинах закрытия потока. Это помогает понять, кто первым рвет соединение и при каких обстоятельствах. Если в логах регулярно всплывают сообщения о некорректной длине содержимого или слишком больших заголовках, уже понятно, куда копать.
Отдельная зона внимания связка с обратным прокси и CDN. Неправильные таймауты, агрессивные ограничения на размер заголовков, перепаковка ответов, включение и отключение компрессии на разных этапах все это может ломать корректный HTTP2 поток. Иногда достаточно временно отключить CDN или перевести его в режим только проксирования без оптимизаций, чтобы убедиться, что причина именно в этих настройках.
Не стоит забывать и про TLS. HTTP2 почти всегда идет поверх HTTPS, а значит срабатывают расширения ALPN, возможны проблемы с отдельными версиями шифросьютов и параметрами безопасности. Некоторые старые балансировщики или фильтрующие устройства поддерживают HTTP2 частично, работают нестабильно и приводят к тому, что разные клиенты видят ERR_HTTP2_PROTOCOL_ERROR без видимой логики.
Наконец, важно смотреть на конкретные проблемные маршруты. Если жалобы идут только от пользователей корпоративных сетей, где трафик пропускается через SSL инспекцию, разумно протестировать сайт через те же устройства и их журналы. Если ошибку ловят в основном мобильные пользователи через определенного оператора, возможно, дело в промежуточных оптимизаторах трафика.
Итоги почему появляется ERR_HTTP2_PROTOCOL_ERROR
Если сильно упростить, ERR_HTTP2_PROTOCOL_ERROR это не одна конкретная поломка, а индикатор, что между браузером и сервером кто-то нарушил правила общения по HTTP2. Виновником может быть баг веб-сервера, хитрая связка прокси и CDN, фильтр, переписывающий HTTPS, или вполне локальный конфликт расширений браузера.
Для пользователя разумная стратегия выглядит так проверить проблему в другом браузере и сети, очистить кеш, временно отключить расширения и антивирусные функции проверки HTTPS. Если ошибка сохраняется, остается зафиксировать детали и передать их поддержке сайта.
Для администратора и разработчика стратегия другая нужно внимательно пройтись по всей цепочке HTTP2, обновить серверные компоненты, аккуратно проверить настройки шлюзов и CDN, при необходимости временно отключить HTTP2 и посмотреть, исчезнет ли ошибка. Важно помнить, что запрос ERR_HTTP2_PROTOCOL_ERROR причина звучит одинаково у всех, но реальная причина почти всегда уникальна для конкретной инфраструктуры.
Чем меньше в цепочке экзотики и хаотичных настроек, тем реже пользователи увидят сухую подпись ERR_HTTP2_PROTOCOL_ERROR и тем меньшую часть времени админы будут тратить на охоту за ускользающими багами HTTP2.