Sobes.tech
Middle

Aký je rozdiel medzi HTTP/1 a HTTP/2?

sobes.tech AI

Odpoveď od AI

Hlavné rozdiely:

  • Multiplexovanie (Multiplexing). HTTP/2 umožňuje odosielanie a prijímanie viacerých požiadaviek a odpovedí súčasne cez jedno TCP spojenie. HTTP/1.1 vyžadoval samostatné spojenie pre každú požiadavku/odpoveď (okrem mechanizmu pipelining, ktorý mal obmedzenia).
  • Hlavičky (Header Compression). HTTP/2 používa kompresiu hlavičiek pomocou algoritmu HPACK, aby znížil ich veľkosť a množstvo prenášaných dát. V HTTP/1.1 sú hlavičky odosielané v textovej podobe.
  • Prioritizácia tokov (Stream Prioritization). V HTTP/2 klient môže určiť prioritu pre rôzne toky (žiadosti/odpovede), čo umožňuje serveru optimalizovať poradie doručovania dát. HTTP/1.1 takýto mechanizmus nemá.
  • Server Push (Server Push). HTTP/2 umožňuje serveru posielať zdroje klientovi skôr, než ich klient požaduje, na základe predpokladu ich potreby pre zobrazenie stránky. V HTTP/1.1 musí klient explicitne požiadať o každý zdroj.
  • Formát rámcov (Binary Framing). HTTP/2 prenáša dáta v binárnom formáte (rámce), čo uľahčuje parsing a zvyšuje efektívnosť v porovnaní s textovým formátom HTTP/1.1.

Porovnanie v tabuľke:

Vlastnosť HTTP/1.1 HTTP/2
Pripojenie Jedno pripojenie na požiadavku (bez pipelining) Jedno pripojenie pre viac tokov
Multiplexovanie Nie (alebo obmedzené pipelining) Áno
Kompresia hlavičiek Nie HPACK (binárna kompresia)
Prioritizácia tokov Nie Áno
Server Push Nie Áno
Formát dát Text Binárny (rámce)
Head-of-Line blokovanie Existuje Čiastočne riešené multiplexovaním

Príklad požiadavky v HTTP/1.1:

// GET /index.html HTTP/1.1
// Host: example.com
// User-Agent: curl/7.68.0
// Accept: */*

Príklad čiastočného zobrazenia dát v HTTP/2 (výmena rámcov je zložitejšia a nie je takto priamo zobraziteľná):

// V HTTP/2 komunikácii prebieha na úrovni rámcov (HEADERS, DATA a pod.),
// ktoré sú binárne a skryté pred používateľom na úrovni aplikácie.
// Predstavovanie v jednoduchom texte je ťažké.
// Hlavičky sú komprimované a prenášajú sa v HEADERS rámcoch.
// Telo odpovede sa prenáša v DATA rámcoch.