Middle
Kuo skiriasi HTTP/1 nuo HTTP/2?
sobes.tech AI
Atsakymas iš AI
Pagrindiniai skirtumai:
- Multiplexing (Multiplexing). HTTP/2 leidžia vienu metu siųsti ir gauti kelis užklausų ir atsakymų srautus per vieną TCP ryšį. HTTP/1.1 reikalavo atskiro ryšio kiekvienai užklausai/atsakui (išskyrus
pipeliningmechanizmą, kuris turėjo apribojimų). - Antraščių suspaudimas (Header Compression). HTTP/2 naudoja HPACK algoritmą antraščių suspaudimui, kad sumažintų jų dydį ir perduodamų duomenų kiekį. HTTP/1.1 antraštės siunčiamos teksto formatu.
- Srautų prioritetas (Stream Prioritization). HTTP/2 klientas gali nurodyti prioritetą skirtingiems srautams (užklausoms/atsakymams), leidžiant serveriui optimizuoti duomenų pristatymo tvarką. HTTP/1.1 tokio mechanizmo neturi.
- Serverio siuntimas (Server Push). HTTP/2 leidžia serveriui siųsti išteklius klientui prieš jo jų paprašius, remiantis prielaida apie jų reikalingumą puslapio rodymui. HTTP/1.1 klientas turi aiškiai paprašyti kiekvieno ištekliaus.
- Rėmelių formatas (Binary Framing). HTTP/2 perduoda duomenis binariniu formatu (rėmeliais), tai palengvina analizę ir padidina efektyvumą, palyginti su HTTP/1.1 teksto formatu.
Lyginamoji lentelė:
| Bruožas | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Ryšys | Vienas ryšys kiekvienai užklausai (be pipelining) |
Vienas ryšys keliems srautams |
| Multiplexing | Nėra (arba ribotas pipelining) |
Yra |
| Antraščių suspaudimas | Nėra | HPACK (binarinis suspaudimas) |
| Srautų prioritetas | Nėra | Yra |
| Serverio siuntimas | Nėra | Yra |
| Duomenų formatas | Tekstas | Binarinis (rėmeliai) |
| Head-of-Line blokavimas | Yra | Iš dalies sprendžiama multiplexing'u |
HTTP/1.1 užklausos pavyzdys:
// GET /index.html HTTP/1.1
// Host: example.com
// User-Agent: curl/7.68.0
// Accept: */*
HTTP/2 duomenų dalies pavyzdys (rėmelių mainai yra sudėtingesni ir nėra taip paprastai vaizduojami):
// HTTP/2 sąveika vyksta rėmelių lygyje (HEADERS, DATA ir kt.),
// kurie yra binariniai ir paslėpti nuo naudotojo programos lygio.
// Juos pateikti paprastu tekstu yra sudėtinga.
// Antraštės suspaudžiamos ir perduodamos HEADERS rėmelyje.
// Atsakymo kūnas perduodamas DATA rėmelyje.