Middle
Czym różnią się protokoły HTTP/1 i HTTP/2?
sobes.tech AI
Odpowiedź od AI
Główne różnice między HTTP/1.1 a HTTP/2:
-
Multipleksowanie:
- HTTP/1.1: Przetwarzanie żądań sekwencyjnie na jednym połączeniu. Do równoczesnego ładowania potrzebne było kilka połączeń TCP.
- HTTP/2: Multipleksowanie na jednym połączeniu TCP. Pozwala na jednoczesne wysyłanie wielu żądań i odbieranie odpowiedzi, nie blokując się nawzajem.
-
Kompresja nagłówków (HPACK):
- HTTP/1.1: Nagłówki przesyłane bez kompresji, co może być nadmiarowe przy dużej liczbie żądań.
- HTTP/2: Kompresja nagłówków z użyciem algorytmu HPACK. Zmniejsza rozmiar przesyłanych danych.
-
Priorytetyzacja strumieni:
- HTTP/1.1: Brak możliwości priorytetyzacji.
- HTTP/2: Klient może przypisywać priorytety różnym strumieniom danych, wpływając na kolejność ich obsługi przez serwer.
-
Push serwera (Server Push):
- HTTP/1.1: Klient musi wyraźnie żądać każdego zasobu (CSS, JS, obrazy).
- HTTP/2: Serwer może wysyłać zasoby, które jego zdaniem będą potrzebne do wyświetlenia strony, zanim klient je zażąda.
-
Protokół binarny:
- HTTP/1.1: Protokół tekstowy, stosunkowo łatwy do odczytania.
- HTTP/2: Protokół binarny, bardziej wydajny do parsowania i przesyłania.
Tabela porównawcza:
| Charakterystyka | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Multipleksowanie | Nie (wiele TCP) | Tak (jedno TCP) |
| Kompresja nagłówków | Nie | Tak (HPACK) |
| Priorytetyzacja strumieni | Nie | Tak |
| Push serwera | Nie | Tak |
| Format protokołu | Tekstowy | Binarny |
| Problem Head-of-Line Blocking | Obecny (dla TCP) | Zredukowany dzięki multipleksowaniu |
Przykład multipleksowania (koncepcyjny):
// HTTP/1.1: Żądania sekwencyjne
fetch('/resource1')
.then(() => fetch('/resource2'))
.then(() => fetch('/resource3'));
// HTTP/2: Równoległe żądania na jednym połączeniu
// W przeglądarce dzieje się to automatycznie dla HTTP/2
// Koncepcyjnie, żądania mogą być wysyłane niemal jednocześnie