Middle
Kāda ir atšķirība starp HTTP/1 un HTTP/2?
sobes.tech AI
Atbilde no AI
Galvenās atšķirības:
- Multiplexing (Multiplexing). HTTP/2 ļauj vienlaikus sūtīt un saņemt vairākus pieprasījumus un atbildes caur vienu TCP savienojumu. HTTP/1.1 prasīja atsevišķu savienojumu katram pieprasījumam/atbildei (izņemot
pipeliningmehānismu, kam bija ierobežojumi). - Virsrakstu saspiešana (Header Compression). HTTP/2 izmanto HPACK algoritmu virsrakstu saspiešanai, lai samazinātu to izmēru un pārsūtāmo datu apjomu. HTTP/1.1 virsraksti tiek sūtīti teksta formātā.
- Plūsmu prioritāte (Stream Prioritization). HTTP/2 klients var norādīt prioritāti dažādām plūsmām (pieprasījumiem/atbildēm), kas ļauj serverim optimizēt datu piegādes secību. HTTP/1.1 tam nav mehānisma.
- Servera sūtīšana (Server Push). HTTP/2 ļauj serverim nosūtīt resursus klientam pirms tas tos pieprasa, balstoties uz pieņēmumu par to nepieciešamību lapas attēlošanai. HTTP/1.1 klientam ir jāpieprasa katrs resurss atsevišķi.
- Rāmu formāts (Binary Framing). HTTP/2 pārsūta datus binārajā formātā (rāmjos), kas atvieglo parsēšanu un palielina efektivitāti salīdzinājumā ar HTTP/1.1 teksta formātu.
Salīdzinājums tabulā:
| Raksturlielums | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Savienojums | Viens savienojums katram pieprasījumam (bez pipelining) |
Viens savienojums vairākiem plūsmām |
| Multiplexing | Nav (vai ierobežots pipelining) |
Ir |
| Virsrakstu saspiešana | Nav | HPACK (bināra saspiešana) |
| Plūsmu prioritāte | Nav | Ir |
| Servera sūtīšana | Nav | Ir |
| Datu formāts | Teksts | Binārs (rāmji) |
| Head-of-Line bloķēšana | Pastāv | Daļēji risināts ar multiplexing'u |
HTTP/1.1 pieprasījuma piemērs:
// GET /index.html HTTP/1.1
// Host: example.com
// User-Agent: curl/7.68.0
// Accept: */*
HTTP/2 datu daļas piemērs (rāmu apmaiņa ir sarežģītāka un nav tik vienkārši attēlojama):
// HTTP/2 komunikācija notiek uz rāmu līmeņa (HEADERS, DATA utt.),
// kas ir bināri un paslēpti lietotājam līmenī.
// To attēlošana vienkāršā tekstā ir sarežģīta.
// Virsraksti tiek saspiesti un pārsūtīti HEADERS rāmi.
// Atbilde tiek pārsūtīta DATA rāmos.