Přejít k navigační liště

Zdroják » Různé » Na rychlé HTTP/2 je skoro vše připraveno

Na rychlé HTTP/2 je skoro vše připraveno

Články Různé

HTTP/2 je nová verze protokolu, která dokáže urychlit načítání vašich webů. Je už téměř plně podporovaná na straně prohlížečů i serverového software. Pokud máte vlastní server, není problém dvojku hned nasadit a já vám radím, abyste to taky udělali. České sdílené hostingy zatím většinou čekají. Na co? Vše se dozvíte.

Nálepky:

Článek původně vyšel na autorově webu Vzhůru dolů.

Frontendu webu se přechod na HTTP/2 dotkne kromě jiného tak, že přestává být potřeba slučovat více vývojářských souborů do jednoho distribučního.

Co je HTTP/2 a jak se liší od HTTP/1.1?

  • Weby na něm fičí, jako když bičem mrská.
  • Je binární, takže se rychleji parsuje a přenáší.
  • Komprimuje i hlavičky a tedy třeba i přenášené cookies.
  • Podporuje multiplexing: v jednu chvíli jde po síti více požadavků i odpovědí, odpadá pak řazení dotazů do fronty.
  • Podporuje Server Push: při prvním dotazu (na HTML) můžete rovnou poslat assety: obrázky, CSS nebo JS.
  • Umí prioritizaci, takže prohlížeče mohou například upřednostnit stahování CSS před obrázky.
  • V praxi ale nejdřív musíte běžet na HTTPS.

Více informací: Michal Špaček o HTTP/2, Jak funguje HTTP/2, Ebook o HTTP/2.
Nástroje: Firefox plugin pro detekci, zda web běží na HTTP/2. Totéž pro Chrome. Jak poznat protokol v Chrome DevTools.

Web může být na HTTP/2 až násobně rychlejší

Dema jsou působivá: http2demo.io a httpvshttps.com, ale vždy záleží na způsobu servírování konkrétního webu do prohlížeče. Pokud je hodně optimalizovaný pro HTTP/1.1, může být po přechodu na dvojku i mírně pomalejší. Je tedy dobré zmínit, že přechod na dvojku není bez práce.

Jak na web nasadit HTTP/2?

  1. Nejdříve je potřeba přejít na bezpečný protokol HTTPS. Tady je kontrolní seznam.
  2. Zapnutí na serveru:
    • Máte vlastní? Je potřeba aktualizovat nebo případně jen nastavit Apache, IIS, NGINX nebo to co vám tam běží.
    • Jste na sdíleném hostingu? V Česku vám ve většině případů nezbývá než prudit webhosting a čekat. Čest výjimkám popsaným níže.
  3. Aktualizujte frontend. To si na tomto blogu zaslouží mírně rozvést, že? Čtěte dále.

Webů běžících na HTTP/2 je už v Česku docela dost. Třeba VašeČočky.cz nebo Zdroják, ten ale jen ve Firefoxu.

Optimalizace frontendu se mění: hodně malých souborů je plus

Při optimalizaci pro HTTP/1.1 frontendisti dbající na rychlost minimalizují data co stránka posílá a počet dotazů na server. Na HTTP/2 už na počtu dotazů tak moc nezáleží.

Pro HTTP/2 je tedy ideální posílání menších CSS, JS souborů. Hlavní důvody pro některé aktuální optimalizační triky odpadají:

  • CSS sprite (slučování obrázků do jednoho)
    Pokud „sprajty“ děláte jen kvůli frontě requestů, není to na HTTP/2 potřeba. Jsou ale i jiné důvody pro jejich použití – třeba datová velikost nebo pořadí zobrazení. Sprity prostě, zdá se, pro potřeby některých scénářů přežijí.
  • Data-uri (přímé vkládání obrázků do HTML nebo CSS)
    Ty se dělaly hlavně kvůli requestům, což nyní padá. Na druhou stranu zvětšovaly datový objem původního obrázku.
  • Spojování CSS a JS
    Obvykle bude lepší posílat řadu malých souborů. Pokud soubory rozdělíme, nemusí být potřeba připravovat kritické CSS, protože menší soubory s CSS dorazí dříve. Jednotlivé CSS a JS také můžeme kešovat s různými pravidly. Nemusíme také do stránky vkládat CSS, které stránka neobsahuje. Totéž u Javascriptu. Samozřejmě v praxi je potřeba zkoušet všechny možnosti. Univerzální doporučení zatím nemám, jen ta papírová.
  • Domain sharding (rozdělování domén pro znásobování fronty)
    Díky tomu se navíc zbavíme vytváření potřeby vytváření nových TCP spojení.

Na tomhle místě si asi řeknete, že ono fakt nestačí změnit protokoly. Moje zkušenost je taková, že pokud jste hodně optimalizovali pro HTTP/1.1, budete do frontendu muset pořádně sáhnout. Pokud jste dosud optimalizaci neřešili, pouhé přepnutí na HTTP/2 vašemu webu nejspíš více či méně pomůže.

Podpora: všude to běží s výjimkou většiny sdílených hostingů

Prohlížeče

HTTP/2 je podporované prakticky všemi moderními prohlížeči. Podívejte se na Can I use. Protokol nepodporují jen Explorery 10 a starší a prohlížeče na čtyřkových Androidech. U webu s běžnou českou návštěvností odhadem do pěti procent.

Nový protokol je ale zpětně kompatibilní, takže obstarožním prohlížečům web přijde na starém dobrém HTTP/1.1. Raději tedy zmíním, že váš frontend optimalizovaný pro HTTP/2 může být na starých křápech o dost pomalejší.

Web servery

Pro Apache je tady mod_http2 (nyní ale označený jako experimental), NGINX podporuje dvojku od verze 1.9.5 a Microsoft IIS od verze 10.

Luděk Michera v komentářích zmiňuje, že u distribucí založených na RedHatu to bude trvat „hodně dlouho“ kvůli čekání na OpenSSL 1.0.2, který umožňuje běh rychlého protokolu v Chrome (potřebuje ALPN).

Serverový software je tedy u některých platforem takřka připravený. Teď ještě, aby to někdo na těch serverech zapnul.

Pokud máte vlastní nebo pronajatý server, nebude problém zapnutí HTTP/2 domluvit. Horší je to na sdíleném hostingu.

České sdílené hostingy

Ty většinou čekají stabilní verzi mod_http2. Na cn130.com je pěkný seznam českých hostingů, které HTTP/2 podporují. Tedy seznam… Jsou zatím dva, možná tři.

  • Wedos prý podporuje HTTP/2 u všech linuxových tarifů.
  • Tele3 to prý nastavuje na vyžádání.
  • Active24 údajně umí na všech tarifech, což je cool. Škoda jen, že aktuálně to využijí jen vaší uživatelé s Firefoxem.
  • WPHosting pro WordPress to píše na webu.
  • ONEBit také na webu zmiňuje HTTP/2 u všech tarifů.

Vyjádření některých dalších hostingů:

 

V podobném duchu mě psal Matěj Kloubek z Českého hostingu:

Experimentální věci samozřejmě nechceme na servery nasazovat, protože jednak není jisté, že budou správně fungovat, a taky se ještě mohou dost měnit. Takže čekáme, až ten modul bude vydán jako stabilní (a to jak obecně, tak pro Debian).

Vývoj budu sledovat. Pokud něco víte, napište prosím do komentářů.

Na statické weby je možné použít CDN jako je třeba cdn77.com, které novou verzi protokolu obvykle podporují.

Nasazení HTTP/2 s Cloudflare

Zajímavou možnost nabízí Cloudflare – CDN, které může fungovat jako HTTPS a HTTP/2 proxy před vaším webem. Ve free plánu pro jeden web je kromě toho také základní DDOS a výhody CDN. Stačí na ně nastavit nameservery své domény. Zkoušel jsem zatím experimentálně a je to hezké.

Co teď?

Pokud máte vlastní server, nebo hostujete tam, kde už HTTP/2 umí, rozhodně do toho jděte. Budu rád, když vaše zkušenosti nasdílíte. Ostatní mohou zkusit Cloudflare nebo čekat.

ebook-vdcss3-prebal-final

Vzhůru do CSS3

Vylepšete své znalosti webového frontendu aktuálním přehledem nástrojů moderního kodéra a nových CSS3 vlastností v jednom ebooku.

Komentáře

Subscribe
Upozornit na
guest
8 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
tompazourek
Jerry12

Moc pekna prednaska, ktera ukazuje, ze HTTP/2 je tak trochu chytak. Technicky jde o uplne jiny protokol nez HTTP/1, ale pritom neni dost jiny. Pevne doufam v rychle prijeti QUIC a presun do stavu, kdy bude HTTP/1 zajistovat jednoduche a zakladni veci. HTTP/2 bude v podstate prechodova implementace a tahounem se stane QUIC.

Kdyz uz reseni, tak ne polovicata.

Jan Prachař

U nginx bych s HTTP/2 počkal až vyjde stable verze 1.12 kvůli tomuhle bugu, který byl opraven ve verzi 1.11.0. Ve Firefoxu za určitých okolností způsobuje, že odeslání POST formuláře skončí chybou na úrovni HTTP/2 protokolu.

A mimochodem, pro stable Debian existuje backport OpenSSL 1.0.2

arcao

Existuje také specifikace HTTP/2 bez potřeby SSL certifikátu. Ta se označuje jako h2c (HTTP/2 over TCP). HTTP/2 se SSL certifikátem (HTTP/2 over TLS) se pak označuje jako h2. Problém je v tom, že se všichni výrobci prohlížečů dohodli, že h2c implementovat zatím nebudou (kvůli bezpečnosti).

Existuje ale hromada implementací, jak serverů, tak i klientů (knihoven), které h2c umí. Jejich seznam můžete nalézt na této stránce: https://github.com/http2/http2-spec/wiki/Implementations

Juraj Komačka

Jak je to v jessie-backports se security updates? Předpokládám, že nejsou…

Ryhle jsem prolít bugreport a vypadá to, že to ovlivňuje jenom POSTy, které nejsou proxy-passované na aplikační server, takže pokud je nezpracovávate přímo ve vlastním modulu v nginxu a zároveň v něm nevoláte ngx_http_read_client_request_body(), tak tam problém není, nebo mi něco uniká?
Používáme nginx 1.10.1 na Debian Wheezy se staticky linkovanou libopenssl 1.0.2 a žádné problémy neevidujeme.

Jan Prachař

No u toho bugreportu píšou, že se to týká i proxy modulu. Já jsem se s tím setkal na klientské straně, takže nevím, jestli byl na straně serveru request „proxy-passován“. Reprodukovat se to dá tak, že ve Firefoxu otevřete stránku s POST formulářem, nějakou dobu počkáte, než Firefox otevřená spojení ukončí (nebo je ukončíte sami), a pak formulář odešlete.

Jakub Vrána

Díky za podrobný aktuální přehled.

Proč Zdroják a Active24 podporuje HTTP/2 jen s Firefoxem?

Martin Hassman

To byl problém NPN (deprecated) a ALPN. Po upgradu nginxu bychom už meli podporovat ALPN, čili i Chrome, které přestalo letos podporovat NPN. http://labs.septeni-technology.jp/technote/google-chrome-http2-and-npn-vs-alpn/

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.