Podívejte se raději na online verzi přednášky, slajdy mohly být aktualizovány nebo doplněny.

Detail přednášky

Pětiminutová přednáška o nové verzi protokolu HTTP.

Detailní popis fungování protokolu HTTP/2 naleznete v článku na Root.cz a ještě podrobněji pak na necelých 40 stranách v knize http2 explained od Daniela Stenberga, autora programu curl.

Datum a akce

11. dubna 2015, Devel.cz Konference 2015 (délka přednášky 5 minut, 20 slajdů)

Slajdy

HTTP/2 (ne HTTP/2.0)

#1 HTTP znamená Hypertext Transfer Protocol a slouží k přenosu webových stránek, souborů a obrázků koťátek.

1991 – HTTP/0.9

#2 První verze HTTP byla označována jako verze 0.9 a byla publikována v roce 1991. Pokud jste se narodili před tímto rokem, tak jste starší, než protokol HTTP.

1996 – HTTP/1.0, 1997 – HTTP/1.1

#3 V roce 1996 vyšla verze HTTP 1.0 a v roce 1997 verze 1.1. Ta byla v roce 1999 aktualizována a pak se dlouho nic nedělo. Poslední aktualizace se HTTP/1.1 dočkalo v červnu 2014.

Location: /path

#4 V té poslední aktualizaci bylo pro webové vývojáře největší změnou to, že hlavička Location může být relativní. Předtím musela být absolutní, ale prohlížečům to bylo stejně jedno.

2012 – SPDY

#5 V roce 2012 se objevil protokol SPDY, za kterým stojí primárně Google. Už podle názvu se tím Google snažil zrychlit načítání webových stránek. A webové stránky obsahují reklamy, že.

Chrome SPDY/3.1, Firefox SPDY/3 & 3.1, IE11 SPDY/3

#6 SPDY měl několik verzí, současné browsery již starší verze nepodporují. Chrome umí už jen verzi 3.1, Firefox umí 3.0 i 3.1. IE 11 umí SPDY/3, ale jen na Win8 a občas to blbne.

HTTP/2 = SPDY/4

#7 Chrome začátkem roku 2016 zcela odstraní podporu SPDY právě ve prospěch HTTP/2. Chrome už HTTP/2 umí, v nastavení je ale pojmenovaná jako SPDY/4, což je prý to samé.

Apache & nginx

#8 Podpora na hlavních serverech je zatím trochu mizerná. nginx prý implementuje HTTP/2 do konce roku 2015 (aktualizace: v září 2015 vyšel nginx s podporou HTTP/2, zatím bez podpory Server Push, viz dále), Apache HTTP/2 standardně neumí, ale existuje pro něj neoficiální rozšíření (aktualizace: v říjnu 2015 vyšel Apache 2.4.17 s podporou HTTP/2).

HTTP/2 = 5 %

#9 Na konci ledna 2015 měl Google na svých serverech 5 % všech přístupů pomocí HTTP/2, ale teď to bude mnohem více. HTTP/2 umí Firefox i Chrome a oba ho pro přístup na Google používají.

h2-17

#10 Nutno dodat, že HTTP/2 byl sice již dokončen, ale ještě nebyl „schválen.“ Zatím existuje ve verzi draft 17, která je označovaná jako h2-17, Chrome a Firefox podporují verzi draft 14 a 15. (Aktualizace: protokol byl v květnu 2015 „schválen“, viz RFC 7540 a RFC 7541.)

Binární protokol

#11 Protokol HTTP/2 se od starších verzí liší například tím, že je binární. Rychleji se tedy parsuje i přenáší. Do textové reprezentace pro zobrazení v debuggerech se překládá.

Obrovské hlavičky

#12 V HTTP/1.1 se doporučovalo statický obsah dávat na samostatné domény, aby se zbytečně v požadavcích na obrázky nepřenášely cookies, které někdy mohly mít v součtu i třeba pár desítek kilo.

Komprese HPACK

#13 HTTP/2 komprimuje i hlavičky a tedy i cookies. Používá na to vlastní algoritmus HPACK. Starší SPDY používalo GZIP, ale kvůli útoku CRIME se musel vymyslet nový algoritmus.

Pipelining

#14 Už HTTP/1.1 umělo v jednom spojení poslat více požadavků zároveň, ale odpověď musela přijít ve stejném pořadí, jako odešly požadavky. Podpora v browserech je ale dost špatná.

Multiplexing

#15 HTTP/2 umí v jednom spojení na server poslat více požadavků, přičemž nezáleží na pořadí odpovědí. Jednotlivé části požadavků nebo odpovědí se mohou dokonce míchat mezi sebou.

Server Push

#16 Když browser stáhne stránku, tak ji musí začít parsovat, aby mohl poslat další požadavky na server pro obrázky apod. HTTP/2 server mu tyhle věci může natlačit předem do cache. (Aktualizace: Apache umí Server Push od verze 2.4.18, nginx Server Push zatím neumí.)

Šifrování

#17 Jednu chvíli to vypadalo, že HTTP/2 bude šifrované spojení vyžadovat, že všechno poběží na TLS a nebude tedy jednoduché provádět odposlechy nebo modifikovat stahovaná data.

h2c – cleartext

#18 Ale není tomu tak, HTTP/2 má i nešifrovanou variantu, označovanou jako h2c – cleartext. Google a Mozilla ale tuto variantu do svých prohlížečů neplánují implementovat.

QUIC – Quick UDP Internet Connections

#19 Google má v zásobě ještě jeden protokol, říká mu QUIC. Je to v podstatě obdoba SPDY, ale funguje na protokolu UDP. Podporuje ho Chrome a používá ho při přístupu na servery Google.

Sprite

#20 A co to všechno pro webové vývojáře znamená? No, budete moci konečně přestat spojovat obrázky dohromady. Ale asi až za pár dlouhých let.

Michal Špaček

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: