Sobes.tech
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.