Sobes.tech
Junior

Rääkige HTTP versioonidest ja nende erinevustest.

sobes.tech AI

Vastus AI-lt

HTTP peamised versioonid:

  • HTTP/0.9: Lihtne versioon lihtsate HTML-dokumentide edastamiseks. Toetas ainult GET meetodit, puudusid päised, vastuse statused.
  • HTTP/1.0: Lisati päiste tugi (Content-Type, User-Agent), POST ja HEAD meetodid, vastuse statused. Ühendus suleti iga päringu/vastuse järel.
  • HTTP/1.1: Olulised täiustused:
    • Püsivad ühendused (Persistent Connections) - TCP ühenduse taaskasutus mitme päringu jaoks.
    • Torujuhtme (Pipelining) - mitme päringu saatmine ilma ootamata vastust (kuigi halvasti rakendatud ja harva kasutusel).
    • Värava nimi (Host header).
    • Osalised GET-päringud (Range header).
    • Vahemälu (Cache-Control, ETag, Last-Modified).
    • Meetodid PUT ja DELETE.
  • HTTP/2: Google SPDY põhine protokoll. Peamised erinevused:
    • Binaarne protokoll teksti asemel - tõhusam parsings.
    • Multiplokeerimine (Multiplexing) - paralleelne mitme päringu/vastuse edastamine ühe TCP ühenduse kaudu. Eemaldab "head-of-line blocking" probleemi HTTP/1.1 torujuhtmes.
    • Päiste tihendamine (HPACK) - vähendab edastatavate andmete suurust.
    • Prioriteet (Server Push) - server võib saata ressursid ette, mis tõenäoliselt on kliendile vajalikud, enne kui ta neid küsib.
  • HTTP/3: Põhineb UDP-l (QUIC-i kasutades) TCP asemel. Eesmärk on parandada jõudlust, eriti ebastabiilsetes võrkudes:
    • "head-of-line blocking" kõrvaldamine TCP tasemel. Kui TCP-s kaotatakse üks pakett, blokeeritakse kõik järgnevad paketid selle edastamiseni. QUIC-is (ja HTTP/3-s) blokeeritakse ainult kaotatud paketi voog.
    • Kiirem ühenduse loomine (0-RTT või 1-RTT).
    • QUIC sisaldab oma voogude kontrolli ja usaldusmehhanisme.

Peamised erinevused tabelis:

Funktsioon HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3
Protokoll TCP TCP TCP UDP (QUIC)
Vormingud Tekstiline Tekstiline Binaarne Binaarne
Ühenduse tüüp vaikimisi Lühiajaline Püsiv Püsiv (miltipleximine) Püsiv (QUIC vood)
Multiplokeerimine Ei Imiteeritud (Pipelining) Jah Jah
Päiste tihendamine Ei Ei HPACK QPACK (QUIC-is)
Serveri push Ei Ei Jah Jah
HOL blokeering (TCP) Jah (päringu tasemel) Jah (päringu tasemel) Jah (ühenduse tasemel) Ei (voo tasemel)

HTTP/1.1 päringu näide:

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

HTTP/2 (kontseptuaalselt, binaarne) päringu näide:

// Päring 1: Saada /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com

// Päring 2: Saada /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...saadetakse paralleelselt ühe ühenduse kaudu