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
GETmetodą, nebuvo antraščių, atsakymo statusų. - HTTP/1.0: Pridėta antraščių (Content-Type, User-Agent) palaikymas,
POSTirHEADmetodai, 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šį