Czym jest HTTP/2?
HTTP/2 to ważna wersja protokołu HTTP (standaryzowana jako RFC 7540), która wprowadza binarne ramki, multipleksowanie, kompresję nagłówków i push serwera, znacznie poprawiając wydajność WWW względem HTTP/1.1.HTTP/2 a HTTP/1.1
| Cecha | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Format | Tekstowy | Binarny |
| Połączenia | Wiele (6-8 na hosta) | Jedno, multipleksowane |
| Obsługa żądań | Sekwencyjna | Równoległe strumienie |
| Kompresja nagłówków | Brak | Kompresja HPACK |
| Push serwera | Niedostępny | Obsługiwany |
| Priorytetyzacja | Brak | Priorytety strumieni |
Jak działa HTTP/2
HTTP/1.1 (Head-of-Line Blocking):
Connection 1: Request A ──────────► Response A
Connection 2: Request B ──────────► Response B
Connection 3: Request C ──────────► Response C
(Multiple connections, sequential per connection)
HTTP/2 (Multiplexing):
Single Connection:
├── Stream 1: Request A ──► Response A
├── Stream 2: Request B ──► Response B
├── Stream 3: Request C ──► Response C
└── All interleaved on same connection
Najważniejsze funkcje
Warstwa binarnych ramek
HTTP/2 Frame Structure:
┌─────────────────────────────────────┐
│ Length (24 bits) │
├─────────────────────────────────────┤
│ Type (8 bits) │ Flags (8 bits) │
├─────────────────────────────────────┤
│ Stream Identifier (32 bits) │
├─────────────────────────────────────┤
│ Frame Payload (variable) │
└─────────────────────────────────────┘
Kompresja nagłówków HPACK
| Scenariusz | Nagłówki HTTP/1.1 | Nagłówki HTTP/2 |
|---|---|---|
| Pierwsze żądanie | ~800 bytes | ~800 bytes |
| Kolejne żądania | ~800 bytes każde | ~20-50 bytes (indeksowane) |
Priorytetyzacja strumieni
Priority Tree:
Root (connection)
├── CSS (weight: 256, high priority)
├── JavaScript (weight: 220)
└── Images (weight: 110, lower priority)
Wymagania serwera
| Serwer | Obsługa HTTP/2 |
|---|---|
| nginx | 1.9.5+ |
| Apache | 2.4.17+ (mod_http2) |
| Node.js | 8.4+ (natywna) |
| IIS | Windows 10/Server 2016+ |
Korzyści wydajnościowe
- Mniejsze opóźnienia: Jedno połączenie eliminuje narzut uzgadniania TCP
- Lepsza kompresja: Redukcja rozmiaru nagłówków o 85-90% w powtarzanych żądaniach
- Ładowanie równoległe: Wszystkie zasoby ładują się jednocześnie
- Push serwera: Proaktywne wysyłanie zasobów przed żądaniem przeglądarki
Dobre praktyki
1. Włącz TLS: HTTP/2 praktycznie wymaga HTTPS (przeglądarki wymuszają ten warunek)
2. Ogranicz dzielenie domen: Wiele domen może teraz pogarszać wydajność
3. Zrezygnuj ze scalania plików: Multipleksowanie zmniejsza potrzebę tworzenia pakietów
4. Ostrożnie używaj push serwera: Wysyłaj z wyprzedzeniem tylko krytyczne zasoby
5. Monitoruj wydajność: Sprawdzaj, czy HTTP/2 poprawia konkretny przypadek użycia
HTTP/2 zapewnia większości witryn znaczną poprawę wydajności dzięki efektywniejszemu wykorzystaniu połączeń sieciowych.