Sobes.tech
Junior

Papaskinkite apie HTTP versijas ir jų skirtumus.

sobes.tech AI

Atsakymas iš AI

Pagrindinės HTTP versijos:

  • HTTP/0.9: Pagrindinė versija paprastų HTML dokumentų perdavimui. Palaikė tik GET metodą, nebuvo antraščių, atsakymo statusų.
  • HTTP/1.0: Pridėta antraščių (Content-Type, User-Agent) palaikymas, POST ir HEAD metodai, atsakymo statusai. Ryšys užsidarydavo po kiekvieno užklausos/atsakymo.
  • HTTP/1.1: Žymūs patobulinimai:
    • Nuolatiniai ryšiai (Persistent Connections) - TCP ryšio pakartotinis naudojimas keliems užklausoms.
    • Vamzdynų siuntimas (Pipelining) - kelių užklausų siuntimas be laukimo atsakymo (nors blogai įgyvendinta ir retai naudojama).
    • Vartotojo vardas (Host header).
    • Daliniai GET užklausos (Range header).
    • Talpykla (Cache-Control, ETag, Last-Modified).
    • METODAI PUT ir DELETE.
  • HTTP/2: Google SPDY pagrindu sukurtas protokolas. Pagrindiniai skirtumai:
    • Dvibandis protokolas vietoje teksto - efektyvesnis analizavimas.
    • Miltiplikacija (Multiplexing) - kelių užklausų/atsakymų perdavimas vienu TCP ryšiu. Pašalina "head-of-line blocking" problemą HTTP/1.1 vamzdynuose.
    • Antraščių suspaudimas (HPACK) - sumažina perduodamų duomenų dydį.
    • Prioritetas (Server Push) - serveris gali iš anksto siųsti išteklius, kurie gali būti reikalingi klientui, prieš jį jų paprašant.
  • HTTP/3: Pagrįstas UDP (naudojant QUIC - Quick UDP Internet Connections) vietoje TCP. Tikslas - pagerinti našumą, ypač nestabiliuose tinkluose:
    • "head-of-line blocking" pašalinimas TCP ryšio lygyje. Jei vienas paketas prarandamas TCP, visi vėlesni paketai blokuojami iki jo perdavimo. QUIC (ir HTTP/3) blokuoja tik prarasto paketo srautą.
    • Greitesnis ryšio nustatymas (0-RTT arba 1-RTT).
    • QUIC turi savo srauto valdymo ir patikimumo mechanizmus.

Pagrindiniai skirtumai lentelėje:

Funkcija HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3
Protokolas TCP TCP TCP UDP (QUIC)
Formatai Tekstinis Tekstinis Binarinis Binarinis
Ryšio pobūdis pagal numatymą Trumpalaikis Nuolatinis Nuolatinis (miltiplikacija) Nuolatinis (QUIC srautai)
Miltiplikacija Ne Imituoja (Pipelining) Taip Taip
Antraščių suspaudimas Ne Ne HPACK QPACK (QUIC)
Serverio siuntimas Ne Ne Taip Taip
HOL blokavimas (TCP) Taip (prašymo lygyje) Taip (prašymo lygyje) Taip (ryšio lygyje) Ne (srauto lygyje)

HTTP/1.1 užklausos pavyzdys:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/7.64.1
Accept: */*

HTTP/2 (konceptualiai, binarinis) užklausos pavyzdys:

// Užklausa 1: Gauti /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com

// Užklausa 2: Gauti /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...perduodama lygiagrečiai per vieną ryšį