Middle
Kuo skiriasi HTTP/1 ir HTTP/2 protokolai?
sobes.tech AI
Atsakymas iš AI
Pagrindiniai skirtumai tarp HTTP/1.1 ir HTTP/2:
-
Mulių paketavimas:
- HTTP/1.1: Užklausų apdorojimas nuoseklus per vieną jungtį. Paralleliam įkėlimui reikėjo kelių TCP jungčių.
- HTTP/2: Mulių paketavimas per vieną TCP jungtį. Leidžia vienu metu siųsti kelis užklausimus ir gauti atsakymus, nesulaikydami vienas kitą.
-
Antraščių suspaudimas (HPACK):
- HTTP/1.1: Antraštės perduodamos nesuspaustos, kas gali būti perteklinga dideliame užklausų kiekyje.
- HTTP/2: Antraščių suspaudimas naudojant HPACK algoritmą. Sumažina perduodamų duomenų dydį.
-
Srautų prioritetas:
- HTTP/1.1: Prioritetas neegzistavo.
- HTTP/2: Klientas gali nustatyti prioritetus skirtingiems duomenų srautams, įtakojančius jų apdorojimo tvarką serveryje.
-
Serverio siuntimas (Server Push):
- HTTP/1.1: Klientas turi aiškiai prašyti kiekvieno resurso (CSS, JS, vaizdų).
- HTTP/2: Serveris gali iš anksto siųsti klientui resursus, kurie, jo manymu, reikalingi puslapio atvaizdavimui, prieš tai, kai klientas jų paprašys.
-
Dvejetainis protokolas:
- HTTP/1.1: Tekstinis protokolas, palyginti lengvai skaitomas.
- HTTP/2: Dvejetainis protokolas, efektyvesnis apdorojimui ir perdavimui.
Lyginamoji lentelė:
| Savybė | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Mulių paketavimas | Ne (reikia kelių TCP) | Taip (vienas TCP) |
| Antraščių suspaudimas | Ne | Taip (HPACK) |
| Srautų prioritetas | Ne | Taip |
| Serverio siuntimas | Ne | Taip |
| Protokolo formatas | Tekstinis | Dvejetainis |
| Head-of-Line blokavimas | Yra (vieno TCP atveju) | Sumažintas dėka mulitplekso |
Pavyzdys, kaip veikia mulitplekso (konceptualiai):
// HTTP/1.1: Sekveninės užklausos
fetch('/resource1')
.then(() => fetch('/resource2'))
.then(() => fetch('/resource3'));
// HTTP/2: Paralele užklausos per vieną jungtį
// Naršyklėje tai vyksta automatiškai HTTP/2
// Konceptualiai užklausos gali būti siunčiamos beveik tuo pačiu metu