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
GETmetodi, nebija galvenes, atbildes statusi. - HTTP/1.0: Pievienotas galvenes (Content-Type, User-Agent),
POSTunHEADmetodes, 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 | Nē | Imitē (Pipelining) | Jā | Jā |
| Galvenes saspiešana | Nē | Nē | HPACK | QPACK (QUIC) |
| Servera push | Nē | Nē | Jā | Jā |
| 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ā