Junior
Povězte o verzích HTTP a jejich rozdílech.
sobes.tech AI
Odpověď od AI
Hlavní verze HTTP:
- HTTP/0.9: Základní verze pro přenos jednoduchých HTML dokumentů. Podporovala pouze metodu
GET, chyběly hlavičky a stavy odpovědí. - HTTP/1.0: Zavádí podporu hlaviček (Content-Type, User-Agent), metod
POSTaHEADa stavy odpovědí. Připojení se uzavřelo po každém požadavku/odpovědi. - HTTP/1.1: Významná vylepšení:
- Trvalá spojení (Persistent Connections) - opětovné použití TCP spojení pro více požadavků.
- Pipelining - odeslání více požadavků bez čekání na odpověď (ačkoliv je špatně implementováno a zřídka používané).
- Virtuální hostitelé (Host hlavička).
- Částečné GET požadavky (Range hlavička).
- Cacheování (Cache-Control, ETag, Last-Modified).
- Metody PUT a DELETE.
- HTTP/2: Na bázi SPDY od Google. Hlavní odlišnosti:
- Binární protokol místo textového - efektivnější parsování.
- Multiplexing - paralelní přenos více požadavků/odpovědí na jednom TCP spojení. Odstraňuje problém "head-of-line blocking" HTTP/1.1 pipelining.
- Komprese hlaviček (HPACK) - zmenšení velikosti přenášených dat.
- Prioritizace (Server Push) - server může odeslat zdroje, které pravděpodobně budou klientovi potřeba, ještě před jeho požadavkem.
- HTTP/3: Postaven na UDP protokolu (s využitím QUIC - Quick UDP Internet Connections) místo TCP. Zaměřen na zlepšení výkonu, zejména v nestabilních sítích:
- Odstranění "head-of-line blocking" na úrovni spojení TCP. Pokud je ztracen paket v TCP, blokují se všechny následující pakety, dokud se neodeslají znovu. V QUIC (a HTTP/3) je blokován pouze proud, kterému patří ztracený paket.
- Rychlejší navázání spojení (0-RTT nebo 1-RTT).
- QUIC obsahuje mechanismy řízení toku a spolehlivosti.
Hlavní odlišnosti v tabulce:
| Funkce | HTTP/1.0 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|---|
| Protokol | TCP | TCP | TCP | UDP (QUIC) |
| Formát | Textový | Textový | Binární | Binární |
| Výchozí spojení | Krátkodobé | Trvalé | Trvalé (multiplexing) | Trvalé (QUIC streamy) |
| Multiplexing | Ne | Popis (Pipelining) | Ano | Ano |
| Komprese hlaviček | Ne | Ne | HPACK | QPACK (v QUIC) |
| Server Push | Ne | Ne | Ano | Ano |
| HOL Blocking (TCP) | Ano (na úrovni požadavku) | Ano (na úrovni požadavku) | Ano (na úrovni spojení) | Ne (na úrovni proudu) |
Příklad požadavku v HTTP/1.1:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/7.64.1
Accept: */*
Příklad požadavku v HTTP/2 (koncepčně, v binárním formátu):
// Požadavek 1: Získat /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com
// Požadavek 2: Získat /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...předávají se paralelně na jednom spojení