Sobes.tech
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 pipelining mechanizmą, 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.