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.