Junior
Porozprávajte o verziách HTTP a ich rozdieloch.
sobes.tech AI
Odpoveď od AI
Hlavné verzie HTTP:
- HTTP/0.9: Základná verzia na prenos jednoduchých HTML dokumentov. Podporovala iba metódu
GET, chýbali hlavičky a stavy odpovedí. - HTTP/1.0: Zaviedla podporu hlavičiek (Content-Type, User-Agent), metódy
POSTaHEAD, a stavy odpovedí. Pripojenie sa zatváralo po každom požiadavke/odpovedi. - HTTP/1.1: Významné vylepšenia:
- Trvalé spojenia (Persistent Connections) - opätovné použitie TCP spojenia pre viacero požiadaviek.
- Pipelining - odoslanie viacerých požiadaviek bez čakania na odpoveď (hoci je zle implementované a zriedka používané).
- Virtuálne hostiteľské mená (Host header).
- Čiastočné GET požiadavky (Range header).
- Cacheovanie (Cache-Control, ETag, Last-Modified).
- Metódy PUT a DELETE.
- HTTP/2: Na báze SPDY od Google. Hlavné rozdiely:
- Binárny protokol - efektívnejšie parsovanie.
- Multiplexing - paralelný prenos viacerých požiadaviek/odpovedí na jednej TCP spojke. Odstraňuje problém "head-of-line blocking" HTTP/1.1 pipeliningu.
- Kompresia hlavičiek (HPACK) - zníženie veľkosti prenášaných dát.
- Prioritizácia (Server Push) - server môže odoslať zdroje, ktoré pravdepodobne budú klientovi potrebné, ešte pred jeho požiadavkou.
- HTTP/3: Postavené na UDP protokole (s využitím QUIC - Quick UDP Internet Connections) namiesto TCP. Zamerané na zlepšenie výkonu, najmä v nestabilných sieťach:
- Odstránenie "head-of-line blocking" na úrovni spojenia TCP. Ak sa stratí paket v TCP, všetky nasledujúce pakety sa blokujú do jeho opätovného odoslania. V QUIC (a HTTP/3) sa blokuje iba tok, ktorému patrí stratený paket.
- Rýchlejšie nadviazanie spojenia (0-RTT alebo 1-RTT).
- QUIC obsahuje vlastné mechanizmy kontroly toku a spoľahlivosti.
Hlavné rozdiely v tabuľke:
| Funkcia | HTTP/1.0 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|---|
| Protokol | TCP | TCP | TCP | UDP (QUIC) |
| Formát | Textový | Textový | Binárny | Binárny |
| Predvolené spojenie | Krátkodobé | Trvalé | Trvalé (multiplexing) | Trvalé (QUIC streamy) |
| Multiplexing | Nie | Opisované (Pipelining) | Áno | Áno |
| Kompresia hlavičiek | Nie | Nie | HPACK | QPACK (v QUIC) |
| Server Push | Nie | Nie | Áno | Áno |
| HOL blocking (TCP) | Áno (na úrovni požiadavky) | Áno (na úrovni požiadavky) | Áno (na úrovni spojenia) | Nie (na úrovni toku) |
Príklad požiadavky v HTTP/1.1:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/7.64.1
Accept: */*
Príklad požiadavky v HTTP/2 (konceptuálne, v binárnom formáte):
// Žiadosť 1: Získať /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com
// Žiadosť 2: Získať /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...paralelne na jednom spojení