Middle
Jaka jest różnica między HTTP/1 a HTTP/2?
sobes.tech AI
Odpowiedź od AI
Główne różnice:
- Multipleksowanie. HTTP/2 pozwala na wysyłanie i odbieranie wielu żądań i odpowiedzi za pomocą pojedynczego połączenia TCP jednocześnie. HTTP/1.1 wymagał oddzielnego połączenia dla każdego żądania/odpowiedzi (z wyjątkiem mechanizmu
pipelining, który miał ograniczenia). - Kompresja nagłówków. HTTP/2 używa kompresji nagłówków za pomocą algorytmu HPACK, aby zmniejszyć ich rozmiar i ilość przesyłanych danych. W HTTP/1.1 nagłówki są wysyłane w formacie tekstowym.
- Priorytetyzacja strumieni. W HTTP/2 klient może wskazywać priorytety dla różnych strumieni (żądań/odpowiedzi), co pozwala serwerowi zoptymalizować kolejność dostarczania danych. HTTP/1.1 takiego mechanizmu nie posiada.
- Push serwera. HTTP/2 pozwala serwerowi wysyłać zasoby do klienta zanim ten ich zażąda, opierając się na założeniu o ich potrzebie do wyświetlenia strony. W HTTP/1.1 klient musi wyraźnie zażądać każdego zasobu.
- Format ramek. HTTP/2 przesyła dane w formacie binarnym (ramki), co ułatwia analizę i zwiększa wydajność w porównaniu do formatu tekstowego HTTP/1.1.
Porównanie w tabeli:
| Cecha | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Połączenie | Jedno połączenie na żądanie (bez pipelining) |
Jedno połączenie dla wielu strumieni |
| Multipleksowanie | Nie (lub ograniczone pipelining) |
Tak |
| Kompresja nagłówków | Nie | HPACK (kompresja binarna) |
| Priorytetyzacja strumieni | Nie | Tak |
| Push serwera | Nie | Tak |
| Format danych | Tekst | Binarny (ramki) |
| Head-of-Line Blocking | Obecny | Częściowo rozwiązany przez multipleksowanie |
Przykład żądania w HTTP/1.1:
// GET /index.html HTTP/1.1
// Host: example.com
// User-Agent: curl/7.68.0
// Accept: */*
Przykład częściowego przedstawienia danych w HTTP/2 (wymiana ramek jest bardziej skomplikowana i nie jest tak łatwo przedstawiona):
// W HTTP/2 komunikacja odbywa się na poziomie ramek (HEADERS, DATA itp.),
// które są binarne i ukryte dla użytkownika na poziomie aplikacji.
// Trudno je przedstawić w prostym tekście tylko dla ilustracji.
// Nagłówki są kompresowane i przesyłane w ramce HEADERS.
// Ciało odpowiedzi jest przesyłane w ramkach DATA.