Sobes.tech
Middle

Care este diferența dintre HTTP/1 și HTTP/2?

sobes.tech AI

Răspuns de la AI

Diferențele principale:

  • Multiplexare. HTTP/2 permite trimiterea și primirea mai multor solicitări și răspunsuri printr-o singură conexiune TCP în același timp. HTTP/1.1 necesita o conexiune separată pentru fiecare solicitare/răspuns (cu excepția cazurilor în care se folosea mecanismul de pipelining, care avea limitări).
  • Comprimarea antetelor. HTTP/2 utilizează comprimarea antetelor cu ajutorul algoritmului HPACK pentru a reduce dimensiunea și cantitatea de date transmise. În HTTP/1.1, anteturile sunt trimise în format text.
  • Prioritizarea fluxurilor. În HTTP/2, clientul poate indica priorități pentru diferite fluxuri (solicitări/răspunsuri), ceea ce permite serverului să optimizeze ordinea livrării datelor. HTTP/1.1 nu are acest mecanism.
  • Push-ul serverului. HTTP/2 permite serverului să trimită resurse către client înainte ca acesta să le solicite, bazându-se pe presupunerea că sunt necesare pentru afișarea paginii. În HTTP/1.1, clientul trebuie să solicite explicit fiecare resursă.
  • Formatul cadrelor. HTTP/2 transmite date în format binar (cadre), ceea ce facilitează parsarea și crește eficiența comparativ cu formatul text al HTTP/1.1.

Comparativ în tabel:

Caracteristică HTTP/1.1 HTTP/2
Conexiune O conexiune pentru fiecare solicitare (fără pipelining) O singură conexiune pentru mai multe fluxuri
Multiplexare Nu (sau limitată de pipelining) Da
Comprimarea antetelor Nu HPACK (comprimare binară)
Prioritizarea fluxurilor Nu Da
Push-ul serverului Nu Da
Formatul datelor Text Binare (cadre)
Blocarea Head-of-Line Presentă Parțial rezolvată prin multiplexare

Exemplu de solicitare în HTTP/1.1:

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

Exemplu de reprezentare parțială a datelor în HTTP/2 (schimbul de cadre este mai complex și nu este atât de ușor de ilustrat):

// În HTTP/2, interacțiunea are loc la nivel de cadre (HEADERS, DATA etc.),
// care sunt binare și ascunse utilizatorului la nivel de aplicație.
// Este dificil să le reprezentăm în text simplu doar pentru ilustrație.
// Anteturile sunt comprimate și transmise în cadrul HEADERS.
// Corpul răspunsului este transmis în cadre DATA.