Web bude rychlejší. Starý protokol HTTP 1.1 po 16 letech nahradí moderní HTTP/2

18. 2. 2015

Sdílet

 Autor: Redakce

Internet, potažmo web, jsou desítky let staré technologie. Při jejich návrhu se nepočítalo s takovým rozmachem, a tak původní formáty a dimenze přestaly stačit. Pomyslné koule u nohy byly tři.

Krátký, úzký a tupozraký

Tou první byl omezený počet adres, které se mohou přidělovat jednotlivým uzlům internetu. Starý protokol IPv4 počítal se 232 adres, tj. něco přes čtyři miliardy. Vlastní adresu potřebuje každý počítač, router, mobil a další zařízení. Nebýt privátních sítích a překladů adres (NAT), už by dávno byly vyčerpány. Nástupce IPv6 už ale funguje, pomalu se rozšiřuje a má tolik adres, že budou stačit ještě hodně dlouho. Adresní prostor čítá 2128, každý člověk na světě mohl mít přibližně 5 × 1028 adres.

Další brzdou byl starý značkovací jazyk HTML, který zkrátka nepočítal s tím, že web bude něco jiného než chytrá digitální kartotéka, ale médium schopné pojmout náročné aplikace srovnatelné s těmi nativními pro desktop. Dokončený standard HTML5 už na to myslí a spolu s dalšími otevřenými technologiemi jako CSS3, JS, WebRTC nebo WebGL umí na web přinést náročný obsah i bez proprietárních pomůcek, jak jsou Flash Player, Silverlight, Java apod.

Posledním na odstřel je protokol HTTP, který slouží pro výměnu dokumentů mezi servery a klienty. Stojí na něm celý web. Jeho současná verze 1.1 pochází z roku 1999 podobně jako HTML4, takže při jeho návrhu nepočítalo s náročnými aplikacemi a weby. Potřebují velké množství menší balíčků dat. Dnes už není hlavním limitem rychlost připojení, ale latence, tedy doby odezvy. Lékem bude dnes dokončený protokol HTTP/2.

Přivítejte HTTP 2.0 HTTP/2

Dokončení oznámila pracovní skupina Internet Engineering Steering Group (IESG) spadající pod hlavní standardizační autoritu Internet Engineering Task Force (IEFT). Návrh dostal ke schválení RFC Editor, který by měl v brzké době prohlásit HTTP/2 za standard.

HTTP/2 si už můžete vyzkoušet v Chromu 40+ a Firefoxu Nightly
HTTP/2 si už můžete vyzkoušet v Chromu 40+ a Firefoxu Nightly

Standard, na kterém spoustu práce udělal Google. Ten si omezení HTTP 1.1 uvědomil už dříve, a proto pracoval na rozšíření SPDY („speedy“), které mělo problémy a nedostatky obejít. SPDY už podporují všechny hlavní prohlížeče: IE 11, Chrome, Firefox, Opera i Safari a také přední weby v čele s Googlem, Facebookem a Twitterem. IESG si vzalo SPDY jako výchozí bod a na těchto základech postavilo HTTP/2.

Multiplexování

Prvním zlepšovákem je tzv. multiplexované spojení. Webové stránky sestávají z desítek až stovek souborů/dokumentů. Přes TCP spojení lze ale přenést jen jeden dokument najednou, takže pro ty desítky musí nejdříve prohlížeč poprosit server o zaslání textu v HTML, po dokončení požádá o jednotlivé kaskádové styly, javascripty, obrázky a další části, ze kterých se tvoří web.

U HTTP 1.1 se zrychlovalo pomocí „hacků“. Prohlížeč mohl s jednou webovou stránkou používat až šest či osm paralelních TCP spojení. Aby snížil počet požadavků, spojovaly se obrázky do tzv. sprites. Udělal se (a přenesl) jeden velký obrázek, který obsahoval více obrázků, a rozdělil se až v prohlížeči, kterému se nadiktovalo: „Tady ukaž část se souřadnicemi X a Y, o šířce A a výšce B.“

Stahování dokumentů ze stránky Seznam.cz
Stahování dokumentů ze stránky Seznam.cz

Pro příklad si analyzujeme úvodní stránku Seznam.cz. V mém případě přenesl 144 souborů, stáhlo se celkem 104 kB za 5,49 s. Moje rychlost stahování je přitom 2,2 MB/s, takže za stejných čas bych mohl přenést až 12 MB. Jenže to platí pro ideální případ, když se stahuje souvislý blok dat. Desítky navázaných spojení a neustálé dotazování načtení zbytečně zdrželo.

SPDY a HTTP/2 ale dokážou dokumenty multiplexovat a poslat všechny jedním TCP spojením. Je rozdíl, pokud pošlete 100 dopisů ve 100 obálkách, nebo v jedné obálce. Ušetří to čas poště při zpracování i vám při rozbalování.

Další zlepšováky

Nový protokol umí jednotlivým požadavkům přiřazovat prioritu. U webových stránek tak budou přednostně přenášeny HTML dokumenty (aby se nejdříve načetl text), CSS, JS a až pak obrázky a po nich flashové prvky apod. Každý příchozí požadavek i odpověď obsahuje hlavičku, HTTP/2 je umí komprimovat, takže se přenese méně dat (až 88% úspora).

Za menší a rychlejší přenosy můžeme poděkovat i tomu, že nový protokol je binární, nikoliv textový jako dosud. Textový zápis zabere více dat, je náchylnější na chyby a je výpočetně náročnější, protože se musí nejdříve parsovat.

Poslední z hlavních novinek je funkce server push. Doteď si o všechny zasílané dokumenty ze serveru musel klient/prohlížeč zažádat. Klient si řekl o HTML, server jej zaslal, klient zpracoval a z toho zjistil, co všechno ještě bude potřebovat, takže pak požádal o další skripty, obrázly atd. Díky funkci push bude moci server sám aktivně posílat prohlížeči dokumenty, protože odhadne, co bude klient potřebovat.

Když Google testoval účinek SPDY, stáhl 25 nejnavštěvovanějších stránek (každou desetkrát) a spočítal, jaký má nová technologie účinek. U nešifrovaných stránek se data stáhla o 27 až 60 % rychleji, u šifrovaných o 36 až 55 % než s HTTP 1.1. Testovanými sítěmi byla kabelovka s rychlostmi 4/1 Mb/s a DSL s 2/0,4 Mb/s.

Co dál?

Jakmile dojde ke standardizaci HTTP/2, může začít postupný přechod na nový protokol se strany prohlížečů i serverů. Potrvá to několik měsíců až let. Implementace není náročná, API zůstalo stejné, takže aplikace se přepisovat nemusí, jen se přepíšou knihovny sahající k HTTP.

 

Ani HTTP/2 ale není konečným řešením. IETF už mluví o potenciálním HTTP/3. Do dvojky se řada technologií nedostala, protože se tlačilo na to, aby byly hotové a schválené alespoň ty nejdůležitější požadavky. Nedostalo se na zasílání TLS certifikátů a DNS záznamů ze strany serveru. HTTP/2 je nadále bezestavový, takže i nadále se budou stavy webů zapisovat například do cookies. A navzdory původním plánům nebude HTTP/2 nakonec vyžadovat TLS šifrování.

bitcoin_skoleni

Zástupci Googlu a Mozilly už ale řekli, že v Chromu a Firefoxu bude HTTP/2 fungovat jen u serverů využívajících TLS. Je to moudrý krok, donutí tím ostatní, aby své weby zabezpečili. Chceš rychlejší web, tak šifruj!

Zdroj: Mnot's blog (1, 2), specifikace HTTP/2