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
GETmeetodit, puudusid päised, vastuse statused. - HTTP/1.0: Lisati päiste tugi (Content-Type, User-Agent),
POSTjaHEADmeetodid, 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