Přejít na hlavní obsah

Návody / Opravte to: návody na chyby, se kterými se lidé skutečně setkávají

ERR_HTTP2_PROTOCOL_ERROR: příčiny a opravy

ERR_HTTP2_PROTOCOL_ERROR znamená, že prohlížeč a server úspěšně vyjednali HTTP/2, ale konkrétní rámec nebo stream ve výměně porušil pravidla protokolu a spojení bylo resetováno. Liší se od selhání TLS: šifrované spojení fungovalo a problém sedí o vrstvu výš, v tom, jak byl utvořen samotný stream HTTP/2.

Co znamená ERR_HTTP2_PROTOCOL_ERROR

HTTP/2 posílá požadavky a odpovědi jako binární rámce přes jedno spojení, s přísnými pravidly pro velikost rámce, kódování hlaviček (HPACK) a stav streamu. Server, proxy nebo CDN, které pošlou poškozený rámec, předimenzovanou hlavičku, nebo rámec pro stream, který je už zavřený, tato pravidla poruší, a klient spojení strhne, místo aby hádal, co se mělo stát. Protože selhání může mít původ na aplikačním serveru, mezilehlé proxy, edge CDN, nebo ve vlastním síťovém stacku prohlížeče, pokrývá tahle chyba širší rozsah kořenových příčin než většina ostatních v tomto seznamu.

Jak se chyba projevuje

Chrome a Edge zobrazí "This page isn't working - ERR_HTTP2_PROTOCOL_ERROR", někdy jen u některých načtení stránky a u jiných ne, což je náznak, že chyba je přerušovaná, ne trvalá špatná konfigurace. Firefox obvykle zobrazí obecnou chybu spojení, aniž by protokol pojmenoval.

curl může HTTP/2 vynutit a ukázat přesně, na kterém rámci spojení selhalo:

curl --http2 -v https://example.com/ 2>&1 | tail -20
...
* Recv failure: Connection reset by peer
* HTTP/2 stream 1 was not closed cleanly: PROTOCOL_ERROR (err 1)

Porovnání s požadavkem HTTP/1.1 na stejnou URL izoluje, jestli je problém specifický pro protokol:

curl --http1.1 -sI https://example.com/

Pokud požadavek HTTP/1.1 uspěje a HTTP/2 selže, chyba je v tom, jak něco v řetězci implementuje HTTP/2, ne v samotné aplikaci.

Co způsobuje ERR_HTTP2_PROTOCOL_ERROR

  • Poškozené nebo předimenzované hlavičky od aplikace nebo proxy. Velmi dlouhá cookie, předimenzovaná sada hlaviček odpovědi, nebo hodnota hlavičky obsahující znaky, které HPACK nedokáže zakódovat, poruší velikost rámce, kterou server nebo klient očekává.
  • Reverzní proxy nebo load balancer s chybnou nebo zastaralou implementací HTTP/2. Některé starší stacky HTTP/2 v nginx, Apache, nebo na vestavěných zařízeních mají známé problémy s konkrétními sekvencemi rámců pod zátěží.
  • Chyba na edge CDN nebo nesoulad protokolu mezi edge a originem. Úsek mezi prohlížečem a edge a úsek mezi edge a originem mohou používat různé protokoly; chyba v překladu mezi nimi občas vyprodukuje tuhle chybu jen u určitých tvarů požadavků.
  • Antivirový software nebo rozšíření prohlížeče, které zachytává provoz HTTPS. Stejná třída softwaru, která způsobuje selhání handshake SSL, může rozbít i zdravý stream HTTP/2, pokud jeho vrstva pro zachytávání nemluví HTTP/2 správně.
  • Zastaralý prohlížeč se starou implementací HTTP/2, nebo poškozená síťová cache prohlížeče.
  • Nesoulad Content-Length za reverzní proxy. Pokud nginx (nebo jiná proxy) předá odpověď, jejíž deklarovaný Content-Length neodpovídá skutečně poslaným bajtům, může se navazující rámcování HTTP/2 uprostřed rozbít.

Jak zjistit, čí je to chyba

Spusťte HTTP kontrolu z několika míst: pokud je selhání konzistentní všude, na vině je zpracování HTTP/2 na serveru nebo CDN. Pokud selhává jen u vás, je mnohem pravděpodobnější lokální příčina, prohlížeč, antivirus, nebo síťové zařízení mezi vámi a webem.

Jak opravit ERR_HTTP2_PROTOCOL_ERROR

Pokud jste návštěvník

  1. Načtěte stránku znovu. Protože příčinou bývá spíš jeden poškozený rámec než trvalá špatná konfigurace, nové spojení často uspěje.
  2. Vymažte cache prohlížeče na chrome://settings/clearBrowserData, protože poškozený cachovaný zdroj může tohle při opětovném načtení spustit.
  3. Dočasně vypněte skenování HTTPS/SSL v antiviru a zkuste to znovu; tahle třída softwaru je běžnou a často přehlíženou příčinou.
  4. Zkuste anonymní okno, abyste vyloučili rozšíření.
  5. Aktualizujte prohlížeč na nejnovější verzi, protože starší klientské implementace HTTP/2 měly známé chyby.

Pokud web provozujete

  1. Porovnejte HTTP/2 s HTTP/1.1 pomocí příkazů curl výše. Pokud selhává jen HTTP/2, problém je ve vrstvě HTTP/2 proxy nebo CDN, ne v aplikaci.
  2. Zvyšte limity velikosti hlaviček v nginx, pokud jsou zapojené velké cookies nebo hlavičky:
    http2_max_field_size 16k;
    http2_max_header_size 32k;
    large_client_header_buffers 4 16k;
    Po změně nginx restartujte nebo znovu načtěte a otestujte znovu.
  3. Zkontrolujte nesoulad Content-Length mezi tím, co posílá aplikace, a tím, co předává proxy; zapněte bufferování proxy (proxy_buffering on;), aby nginx mohl přečíst celou odpověď, než ji zarámuje pro HTTP/2.
  4. Aktualizujte nginx, Apache, nebo jakýkoli load balancer na aktuální verzi; chyby ve zpracování rámců HTTP/2 jsou přesně to, co se opravuje v drobných vydáních.
  5. Vypněte HTTP/2 jako diagnostický test, ne trvalou opravu: dočasně odeberte http2 z direktivy listen v nginx. Pokud chyby přestanou, je potvrzeno, že chyba je konkrétně ve vrstvě HTTP/2, a znovu ho zapnete, jakmile bude hotová oprava hlaviček nebo bufferování výše.
  6. Zkontrolujte logy na straně CDN, pokud nějaká sedí před originem; většina CDN zobrazuje chyby rámcování HTTP/2 ve svých edge logách s podrobnějšími informacemi, než jaké kdy ukáže prohlížeč.

Související chyby

  • ERR_SSL_PROTOCOL_ERROR vypadá podobně, ale selže dřív, během TLS handshake, ještě předtím, než se vymění jakýkoli rámec HTTP/2.
  • Chybové kódy serveru 5xx pokrývají případy, kdy spojení a protokol fungují v pořádku, ale selže samotná aplikace.

Jeden detail stojí za oddělení: chyba protokolu HTTP/2 není totéž co stream HTTP/2, který aplikace čistě resetovala, například když klient uprostřed zruší požadavek. Vývojářské nástroje prohlížeče a přístupové logy serveru občas označí obojí jako "reset", ale ERR_HTTP2_PROTOCOL_ERROR v prohlížeči vyprodukuje jen skutečné porušení rámcování; záměrně zrušený stream jednoduše skončí bez chybové stránky.

Jak předejít ERR_HTTP2_PROTOCOL_ERROR

Protože tahle chyba bývá často přerušovaná, vázaná na konkrétní velikosti hlaviček nebo konkrétní verze proxy, může postihovat zlomek návštěvníků celé týdny, než si toho někdo všimne jako vzoru. HTTP kontrola běžící podle plánu z více míst zachytí rostoucí míru selhání hned po nasazení, změně CDN, nebo upgradu proxy, místo aby se spoléhala na roztroušená hlášení uživatelů. HostTracker upozorní e-mailem, SMS, hlasovým hovorem, přes Slack, Telegram a další, jakmile kontrola začne selhávat.

Často kladené otázky

Je ERR_HTTP2_PROTOCOL_ERROR totéž jako chyba SSL?

Ne. Tahle chyba nastává poté, co TLS uspěje, ve vrstvě rámcování HTTP/2. Chyba SSL znamená, že se šifrované spojení vůbec nevytvořilo.

Proč se chyba objevuje jen někdy, ne při každém načtení stránky?

Většinu příčin tady spouští konkrétní podmínky, hlavička, která přeroste limit, souběh v proxy pod zátěží, konkrétní cachovaný zdroj, ne pevná špatná konfigurace, která selže pokaždé.

Poškodí vypnutí HTTP/2 na mém serveru výkon?

HTTP/2 nabízí skutečné výhody (multiplexing, komprese hlaviček), takže jeho vypnutí berte jako dočasný diagnostický krok, ne trvalou opravu. Opravte základní problém s velikostí hlaviček nebo bufferováním a znovu ho zapněte.

Může tohle způsobit CDN, i když je můj origin v pořádku?

Ano. Edge CDN a origin mohou na každém úseku spojení používat jiný protokol, a chyba nebo špatná konfigurace v tom, jak mezi nimi CDN překládá, může vyprodukovat tuhle chybu nezávisle na zdraví samotného originu.

Stává se tohle i na webech s HTTP/1.1?

Ne, ERR_HTTP2_PROTOCOL_ERROR je specifické pro spojení, která vyjednala HTTP/2. Web obsluhující jen HTTP/1.1 tuhle konkrétní chybu vyprodukovat nemůže, i když může mít vlastní problémy se spojením.

Zkontrolovat hned

Spusťte bezplatnou kontrolu na svém webu - bez registrace.

HTTP check

Sledovat trvale

Dostanete upozornění ve chvíli, kdy něco přestane fungovat: HostTracker kontroluje z více než 300 lokalit a upozorní vás e-mailem, SMS, přes Slack, Telegram a další.

Funkce HostTracker

Více v této sekci: Opravte to: návody na chyby, se kterými se lidé skutečně setkávají