Online version

Talk detail

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.

Date and event

11. 4. 2015, Devel.cz Konference 2015 (talk duration 5 minutes, 20 slides)

Slides

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.

Česky