Middle
Jaký je rozdíl mezi HTTP/1 a HTTP/2?
sobes.tech AI
Odpověď od AI
Hlavní rozdíly:
- Multiplexování (Multiplexing). HTTP/2 umožňuje současné odesílání a přijímání více požadavků a odpovědí přes jedno TCP spojení. HTTP/1.1 vyžadoval samostatné spojení pro každý požadavek/odpověď (kromě mechanismu
pipelining, který měl omezení). - Hlavičky (Header Compression). HTTP/2 používá kompresi hlaviček pomocí algoritmu HPACK, aby snížil jejich velikost a množství přenášených dat. V HTTP/1.1 jsou hlavičky odesílány v textové podobě.
- Prioritizace toků (Stream Prioritization). V HTTP/2 může klient určit prioritu pro různé toky (požadavky/odpovědi), což umožňuje serveru optimalizovat pořadí doručování dat. HTTP/1.1 takový mechanismus nemá.
- Server Push (Server Push). HTTP/2 umožňuje serveru posílat zdroje klientovi předtím, než je klient požádá, na základě předpokladu jejich potřeby pro zobrazení stránky. V HTTP/1.1 musí klient explicitně požádat o každý zdroj.
- Formát rámců (Binary Framing). HTTP/2 přenáší data v binárním formátu (ramečky), což usnadňuje parsing a zvyšuje efektivitu ve srovnání s textovým formátem HTTP/1.1.
Porovnání v tabulce:
| Vlastnost | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Připojení | Jedno připojení na požadavek (bez pipelining) |
Jedno připojení pro více toků |
| Multiplexování | Ne (nebo omezené pipelining) |
Ano |
| Komprese hlaviček | Ne | HPACK (binární komprese) |
| Prioritizace toků | Ne | Ano |
| Server Push | Ne | Ano |
| Formát dat | Text | Binární (ramečky) |
| Head-of-Line blokování | Přítomno | Částečně řešeno multiplexováním |
Příklad požadavku v HTTP/1.1:
// GET /index.html HTTP/1.1
// Host: example.com
// User-Agent: curl/7.68.0
// Accept: */*
Příklad částečného zobrazení dat v HTTP/2 (výmena rámců je složitější a není takto přímo zobrazitelná):
// V HTTP/2 komunikace probíhá na úrovni rámců (HEADERS, DATA atd.),
// které jsou binární a skryté před uživatelem na úrovni aplikace.
// Představit je v jednoduché textové podobě je složité.
// Hlavičky jsou komprimovány a přenášeny v HEADERS rámci.
// Tělo odpovědi je přenášeno v DATA rámcích.