📆 28. 8. 2017 📂 HTTPS, HTTP/2, Chrome

Při přesunu vašeho webu na výkonnější protokol HTTP/2 se může stát, že Chrome najednou stránku nenačte a místo toho zobrazí jen This site can’t be reached s chybou ERR_SPDY_PROTOCOL_ERROR. SPDY byl protokol, ze kterého HTTP/2 vychází, nejspíš proto chyba HTTP/2 vůbec nezmiňuje.

:-( This site can’t be reached ERR_SPDY_PROTOCOL_ERROR

Jedním z důvodů zobrazení chyby ERR_SPDY_PROTOCOL_ERROR může být špatná HTTP hlavička posílaná ze serveru. Chrome je trochu citlivka, při zpracovávání binárního HTTP/2 mu vadí i hlavička s mezerou místo pomlčky (např. Referrer Policy místo Referrer-Policy), takže si zkontrolujte, jestli všechny hlavičky posíláte správně. Firefox takovou chybnou hlavičku ignoruje a stránku načte.

Jak najít hlavičku, která to způsobuje? Jděte do chrome://net-internals/#events (na odkaz se nedá kliknout, ale můžete ho jednoduše zkopírovat), do vyhledávacího políčka zadejte vaši doménu (v mých příkladech to je example.com), v jiném tabu prohlížeče zkuste váš web načíst. Pak se vraťte do chrome://net-internals/#events a klikněte na řádek s HTTP2_SESSION v sloupci Source Type.

chrome://net-internals/#events HTTP2_SESSION Source Type

V pravé části okna se objeví detaily protokolu HTTP/2, důležitá je tato část:

t=50413 [st=7]  HTTP2_SESSION_RECV_INVALID_HEADER
                --> header_name = "referrer policy"
                --> header_value = "same-origin"
t=50413 [st=7]  HTTP2_SESSION_SEND_RST_STREAM
                --> description = "Could not parse Spdy Control Frame Header."
                --> error_code = "1 (PROTOCOL_ERROR)"
                --> stream_id = 3

Všimněte si řádku s HTTP2_SESSION_RECV_INVALID_HEADER, pod ním je uvedená chybná hlavička, v tomto případě je to referrer policy, tedy s mezerou, bez pomlčky. HTTP/2 názvy hlaviček zmenšuje, takže i když z aplikace pošlete hlavičku Referrer-Policy, tak do prohlížeče dorazí referrer-policy. Nebo, jako v tomto případě, nevalidní hlavička referrer policy.

V chrome://net-internals/ se dozvíte o vnitřních procesech a požadavcích prohlížeče a extenzí, které ani Developer Tools nezobrazí, doporučuju to pořádně prozkoumat, může se vám to později hodit. Já jsem toho využil například při zkoumání „VPN“ v Opeře i nešifrované „VPN“ v UR browseru.

Michal Špaček

Vyvíjím webové aplikace, zajímá mě jejich bezpečnost. Nebojím se o tom mluvit veřejně, hledám hranice tak, že je posouvám. Chci naučit webové vývojáře stavět bezpečnější a výkonnější weby a aplikace.

Veřejná školení

Zvu vás na následující školení, která pořádám a vedu:

Úvod do PHP
(11. 12. 2017 Praha)

Třídy a objekty v PHP
(12. 12. 2017 Praha)

Bezpečnost PHP aplikací
(13. 12. 2017 Praha)

Výkonnost webových aplikací
(14. 12. 2017 Praha)

HTTPS pro vývojáře a správce
(prosinec 2017 Praha)

English