Sobes.tech
Junior

Pastāstiet par HTTP versijām un to atšķirībām.

sobes.tech AI

Atbilde no AI

Galvenās HTTP versijas:

  • HTTP/0.9: Vienkārša versija, lai pārsūtītu vienkāršus HTML dokumentus. Atbalstīja tikai GET metodi, nebija galvenes, atbildes statusi.
  • HTTP/1.0: Pievienotas galvenes (Content-Type, User-Agent), POST un HEAD metodes, atbildes statusi. Savienojums tika aizvērts pēc katras pieprasījuma/atbildes.
  • HTTP/1.1: Lielas uzlabojumi:
    • Pastāvīgi savienojumi (Persistent Connections) - TCP savienojuma atkārtota izmantošana vairākām pieprasījumiem.
    • Caurlaidība (Pipelining) - vairāku pieprasījumu nosūtīšana bez gaidīšanas atbildes (lai gan slikti īstenots un reti lietots).
    • Viesnīcas nosaukums (Host header).
    • Daļējas GET pieprasījumi (Range header).
    • Kešatmiņa (Cache-Control, ETag, Last-Modified).
    • METODES PUT un DELETE.
  • HTTP/2: Google SPDY balstīts protokols. Galvenās atšķirības:
    • Binārs protokols vietā teksta - efektīvāka parsēšana.
    • Multiplēksēšana (Multiplexing) - paralēla vairāku pieprasījumu/atbilžu pārraide vienā TCP savienojumā. Novērš "head-of-line blocking" problēmu HTTP/1.1 caurlaidībā.
    • Galvenes saspiešana (HPACK) - samazina pārraidāmo datu apjomu.
    • Prioritāte (Server Push) - serveris var nosūtīt resursus, kas, iespējams, būs nepieciešami klientam, pirms tas to pieprasa.
  • HTTP/3: Balstīts uz UDP (ar QUIC - Quick UDP Internet Connections) vietā TCP. Mērķis - uzlabot veiktspēju, īpaši nestabilos tīklos:
    • "head-of-line blocking" novēršana TCP līmenī. Ja TCP zaudē vienu paketi, visi nākamie paketi tiek bloķēti līdz tās pārnosūtīšanai. QUIC (un HTTP/3) bloķē tikai zaudētā paketa plūsmu.
    • Ātrāka savienojuma izveide (0-RTT vai 1-RTT).
    • QUIC ietver savus plūsmas pārvaldības un uzticamības mehānismus.

Galvenās atšķirības tabulā:

Funkcija HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3
Protokols TCP TCP TCP UDP (QUIC)
Formāts Tekstā Tekstā Binarā Binarā
Savienojuma veids pēc noklusējuma Īss termiņš Pastāvīgs Pastāvīgs (miltiplēks) Pastāvīgs (QUIC straumes)
Multiplēksēšana Imitē (Pipelining)
Galvenes saspiešana HPACK QPACK (QUIC)
Servera push
HOL bloķēšana (TCP) Jā (pēc pieprasījuma līmeņa) Jā (pēc pieprasījuma līmeņa) Jā (savienojuma līmenī) Nē (plūsmas līmenī)

HTTP/1.1 pieprasījuma piemērs:

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

HTTP/2 (konceptuāli, binārs) pieprasījuma piemērs:

// Pieprasījums 1: Saņemt /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com

// Pieprasījums 2: Saņemt /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...paralēli pārraidīts vienā savienojumā