Sobes.tech
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 POST a HEAD a 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í