О чём говорит код
HTTP/2 — вторая версия протокола обмена страницами, которая передаёт несколько запросов по одному соединению, сжимает заголовки и использует бинарные кадры. Если одна из сторон присылает кадр, нарушающий правила протокола, вторая стороны обрывает соединение, а Chrome показывает ERR_HTTP2_PROTOCOL_ERROR.
Ошибка сложная только на вид. Суть в том, что защищённое соединение установилось, но дальше пошло что-то не по правилам: неверный порядок кадров, повреждённые заголовки, недопустимое значение параметра.
Причина, почему такие ошибки заметны в основном пользователям современных браузеров, проста: они используют HTTP/2 по умолчанию, а старые клиенты и некоторые программы работают по HTTP/1.1, где подобных сбоев просто нет.
Кто нарушает правила
Чаще всего виноваты промежуточные устройства и программы: антивирусы, разбирающие защищённый трафик, корпоративные шлюзы, некоторые прокси. Они неверно обрабатывают кадры HTTP/2 и портят данные.
Со стороны сервера причиной становятся баги или неправильная настройка веб-сервера, балансировщика или CDN, слишком большие заголовки, неправильная работа со сжатием, несогласованные лимиты. Повреждённый кэш и расширения браузера встречаются реже, но тоже возможны.
Выделяется и ещё одна частая ситуация: очень большое количество cookies у одного сайта. Суммарный размер заголовков превышает лимит сервера или посредника, и соединение обрывается с ошибкой протокола, хотя ни сервер, ни браузер формально не сломаны.
Как сузить круг
Откройте страницу в режиме инкогнито, затем в другом браузере и на другом устройстве. Если проблема исчезла в другом браузере, чистите кэш, cookies и отключайте расширения у Chrome. Если она сохраняется на всех устройствах вашей сети, но пропадает при переключении на мобильную сеть, виноват роутер, провайдер или сетевая программа.
Если ошибка везде, включая чужие устройства, проблема на сервере. Обращайте внимание, воспроизводится ли она на отдельных адресах, например на страницах с большим количеством cookies.
Хорошую подсказку даёт поведение на разных страницах одного сайта: если ломаются только страницы с большим объёмом данных или с загрузкой, вероятная причина в лимитах и буферах, а если все — в базовой настройке протокола.
Действия пользователя
Очистите cookies и кэш для сайта. Отключите расширения. Временно отключите проверку HTTPS в антивирусе и обновите его. Уберите прокси, если он не требуется. Перезагрузите роутер.
Обновите Chrome до актуальной версии: в новых версиях исправляются ошибки работы протоколов. Если у вас включены экспериментальные настройки браузера, верните значения по умолчанию. Сброс сетевых параметров системы также иногда помогает, если причина в драйвере или сетевом ПО.
Действия владельца сайта
Проверьте журналы веб-сервера и посредников на ошибки протокола. Убедитесь, что размер заголовков и cookies не превышает лимиты, что версии веб-сервера и библиотек актуальны, что CDN и балансировщик настроены согласованно. Попробуйте временно отключить HTTP/2 на сервере: если ошибка уходит, ищите баг в конфигурации, а не оставляйте отключение навсегда.
Проверьте сайт с разных клиентов, включая браузеры на других движках.
Если у вас включена проверка защищённого трафика в антивирусе или в корпоративном шлюзе, добавьте проблемный домен в исключения, а не отключайте защиту целиком. Так вы сохраните безопасность и одновременно исключите вмешательство в работу протокола.
Родственные ошибки
Похожим образом ведёт себя ошибка QUIC: она относится к следующему протоколу, HTTP/3, работающему поверх UDP. Если у вас одновременно бывают обе, причина, вероятно, в общем сетевом ПО, которое неверно обрабатывает современные протоколы. В такой ситуации помогает обновление драйверов и отключение перехвата трафика на устройстве.
Для наблюдения за проблемой пригодится журнал сетевых событий Chrome и инструменты разработчика: в них видны точные коды закрытия потоков. Их полезно приложить к обращению в поддержку сайта или хостинга, если проблема повторяется.