Protokol HTTP/2 byl dokončen. Prohlížeče už ho podporují

27. 2. 2015
Doba čtení: 5 minut

Sdílet

IPv6 a HTML5 už dobývají web, ale třetí do party zatím chyběl. Až nyní, po patnácti letech od vydání poslední verze standardu, přichází HTTP/2. Díky multiplexování je rychlejší, díky kompresi hlaviček úspornější a díky přístupu prohlížečů dopomůže k bezpečnějšímu webu. Ty totiž budou vyžadovat šifrování.

O protokolu HTTP/2 se zatím moc nemluvilo, a to zejména ze dvou důvodů. Za prvé není tak revoluční jako IPv6 nebo HTML5 a za druhé se pod tímto názvem nevyvíjí tak dlouho. Nedostatky protokolu HTTP si už v roce 2009 začal uvědomovat Google, jehož služby na něm samozřejmě velmi závisí. Odstartoval tak projekt s HTTP kompatibilního protokolu SPDY. Ten postupně nasadil ve svých službách a jeho podporu integrovaly i všechny velké prohlížeče.

Právě na SPDY bylo HTTP/2 za asistence Googlu z velké části postaveno. Tyto dva projekty si tedy v žádném případě nekonkurují, spíše můžeme SPDY označit za otce HTTP/2. Koneckonců Google už oznámil, že podporu SPDY ukončí právě ve prospěch HTTP/2. V polovině února byl schválen finální návrh standardu a nasazení nového protokolu už tedy nic nebrání. Současně organizace Internet Engineering Task Force schválila také návrh standardu HPACK, který definuje formát pro kompresi HTTP hlaviček.

Multiplexováním vstříc rychlosti

Změnám v samotném protokolu se budeme věnovat v samostatném odborném článku, ale i zde zmiňme to nejdůležitější. Zásadní změnou je podpora multiplexování. To znamená, že souběžně může být vyřizováno více požadavků, ne pouze jedna jako v HTTP/1. Pokud se vyskytne problém s vyřízením jednoho požadavku, prohlížeč tak nezůstane viset, ale bude mezi tím pracovat s dalšími. Právě multiplexování by mělo nezanedbatelně zrychlit načítání stránek. Zrychlení se však bude lišit v jednotlivých případech a nelze ho rozumně změřit. Další velkou změnou je fakt, že HTTP/2 bude přenášet data v binárním formátu. Od toho se očekává zejména nižší náchylnost k chybám.

Jak už bylo zmíněno, v HTTP/2 se počítá s kompresí hlaviček požadavků. Důvodem je zkrátka zrychlení a a snížení množství přenášených dat. Původně měl být pro kompresi použit formát gzip, nicméně při jeho použití se SPDY bylo upozorněno na několik možných bezpečnostních problémů, zejména exploit zvaný CRIME. Proto bylo rozhodnuto o vytvoření nového formátu ušitého na míru pro hlavičky HTTP požadavků. Ten dostal jméno a HPACK a prochází schvalovacím procesem spolu s HTTP/2.

Významnou novinkou je také server push. Push v tomto případě znamená něco trochu jiného, než jsme zvyklí. Nová možnost v podstatě umožňuje serveru na jeden požadavek poslat víc odpovědí. Při načítání stránky se typicky načítá HTML a poté CSS, JavaScript a další. V HTML/1 prohlížeč musel postupně žádat o každou z těchto součástí. Díky server push mu je server může poslat hned po prvním požadavku o HTML, pokud si myslí, že je bude potřebovat. Zjednodušeně řečeno mu bez vyžádání pošle zprávu, ve které stojí: posílám vám odpověď na tu a tu potenciální otázku.

Prohlížeče: bezpodmínečné ano šifrování

Přechod na druhou verzi HTTP bude pro běžné uživatele v podstatě nepostřehnutelný. Řešit ho musí pouze provozovatelé webových serverů či aplikací. Jako první s implementací začínají webové prohlížeče. Firefox podporu HTTP/2 zapnul v právě vydané verzi 36, stabilní Chrome už protokol také podporuje, ale je potřeba ho aktivovat pomocí parametru  --enable-spdy4. Jeho zapnutí v základu je pravděpodobně otázkou několika týdnů. Protokol je ve výchozím stavu povolen rovněž v Internet Exploreru 11, ale zatím pouze ve vývojové verzi Windows 10.

Při tvorbě standardu se vedly dlouhé diskuse o tom, zda má HTTP/2 vyžadovat šifrované spojení (TLS). Nakonec bylo rozhodnuto, že nebude podmínkou. V praxi se ale s HTTP/2 bez šifrování zřejmě setkáme jen sporadicky. Webové prohlížeče, všechny zmíněné v předchozím odstavci, totiž využily svého vlivu a řekly: HTTP/2 jedině přes TLS. Druhá generace HTTP tak nezanedbatelně může dopomoci i k rozvoji šifrovaného spojení. A šifrované spojení přes HTTP/2 není o nic pomalejší než nešifrované přes HTTP/1. Naopak. Ověřit si to můžete sami v testu na stránce HTTP vs HTTPS.

Apache je k HTTP/2 zatím chladný

Aby bylo možné HTTP/2 použít, je samozřejmě nutná podpora také z druhé strany – tedy zejména webových serverů. Vývojáři nejpopulárnějšího webserver Apache se k nasazení HTTP/2 zatím nijak oficiálně nevyjádřili, dá se říct, že razí konzervativnější strategii. Už dlouho je pro Apache k dispozici modul pro podporu SPDY mod_spdy, který vyvinul přímo Google a před několika měsíci ho předal do rukou nadace Apache. Od té doby se ale v podstatě nic neudálo a modul se stále nestal součástí výchozí instalace a ani se prakticky nevyvíjí. Těžko říct, kde je problém, z technického hlediska už by podpora HTTP/2 neměla být nijak obtížná. Tak doufejme, že po finalizaci standardu už se práce na podpoře HTTP/2 rozbíhají na plné obrátky.

ict ve školství 24

U konkurenčního serveru nginx je situace lepší. Modul pro experimentální podporu SPDY obsahuje už skoro dva roky od verze 1.3.15. Ani zde však není aktivní ve výchozím stavu, je třeba ho zkompilovat a poté povolit, více viz dokumentace. Je pravděpodobné, že plné podpory HTTP/2 se v nginxu dočkáme dřív než u Apache. Na podporu HTTP/2 se připravuje také IIS ve Windows. Ve vývojové verzi Windows 10 (technical preview) už je obsažena, ale pro aktivaci je potřeba úprava registrů.

Podpora ze strany webových serverů a prohlížečů je nejdůležitější, ale např. pro tvorbu aplikací komunikujících přes HTTP/2 je potřeba také implementace do různých programovacích jazyků či frameworků. Na GitHubu HTTP/2 naleznete podrobný přehled známých implementací. Zmiňme např. ty pro Perl, Node.js, Ruby, Python, Haskell a další. Obvykle jsou sice označeny jako alfaverze, ale to je dáno spíš tím, že standard HTTP/2 byl finalizován teprve před nedávnem. Jinak jsou ve vývoji už relativně dlouho a dá se očekávat, že brzy budou velmi slušně použitelné.

Odkazy

Autor článku

Bývalý redaktor serveru Root.cz, dnes produktový manažer a konzultant se zaměřením na Bitcoin a kryptoměny.