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