HTTP/2 to druga główna wersja protokołu HTTP, ustandaryzowana w 2015 roku jako RFC 7540 i wyrosła z eksperymentu Google o nazwie SPDY. Jej sens w jednym zdaniu: ten sam HTTP co zawsze (te same metody, kody statusu, nagłówki), ale przepakowany w binarny, dużo wydajniejszy transport. Zamiast tekstowych komunikatów linijka po linijce, HTTP/2 tnie komunikację na binarne ramki (frames) i pozwala upchać wiele równoległych żądań w jednym połączeniu TCP.
Jak to działa
Najważniejsza zmiana to multipleksowanie. W HTTP/1.1 jedno połączenie obsługiwało jedno żądanie naraz, więc przeglądarka otwierała po 6 połączeń na domenę i i tak grzęzła w head-of-line blocking — wolny obrazek blokował wszystko za sobą. HTTP/2 wprowadza strumienie (streams): w obrębie jednego połączenia lecą dziesiątki żądań i odpowiedzi jednocześnie, poprzeplatane na poziomie ramek. Do tego dochodzi kompresja nagłówków mechanizmem HPACK — nagłówki, które przy każdym żądaniu są niemal identyczne (cookies, user-agent), nie są wysyłane w kółko od zera.
W praktyce strona z setką drobnych zasobów ładuje się szybciej, bez sztuczek typu sprite’y CSS czy domain sharding, które w HTTP/1.1 były obowiązkowe. Prawie zawsze HTTP/2 jedzie po TLS (h2), bo przeglądarki nie wspierają wersji bez szyfrowania.
Przykład z praktyki
Najszybciej sprawdzisz, czy serwer gada po HTTP/2, curlem:
curl -I --http2 https://example.com
W odpowiedzi zobaczysz HTTP/2 200 zamiast HTTP/1.1 200 OK. Po stronie serwera włączenie to zwykle jedna dyrektywa — w nginx listen 443 ssl http2;, w Apache Protocols h2 http/1.1. W DevTools Chrome dodaj kolumnę „Protocol” w zakładce Network, a zobaczysz h2 przy każdym żądaniu.
Częste błędy i mity
- „HTTP/2 wymaga HTTPS” — formalnie nie, ale w praktyce tak, bo żadna popularna przeglądarka nie zestawi h2 po gołym TCP.
- Server Push to przyszłość — był, ale okazał się bardziej szkodliwy niż pomocny i Chrome go wyrzucił. Nie buduj na nim niczego.
- Optymalizacje z HTTP/1.1 nadal pomagają — sklejanie plików czy sharding domen potrafią wręcz zaszkodzić, bo łamią multipleksowanie po jednym połączeniu.
- HTTP/2 leczy head-of-line blocking — tylko na poziomie HTTP. Na poziomie TCP problem zostaje (zgubiony pakiet blokuje całe połączenie), i dopiero HTTP/3 nad QUIC to rozwiązuje.
Pojęcia powiązane
Warto znać: HTTP/1.1, HTTP/3, QUIC, SPDY, TLS/ALPN, HPACK, head-of-line blocking, multipleksowanie, TCP.