Sobes.tech
Middle

Wat is het verschil tussen HTTP/1 en HTTP/2?

sobes.tech AI

Antwoord van AI

Belangrijkste verschillen:

  • Multiplexing. HTTP/2 maakt het mogelijk om meerdere verzoeken en antwoorden gelijktijdig via één TCP-verbinding te verzenden en te ontvangen. HTTP/1.1 vereiste een aparte verbinding voor elk verzoek/antwoord (behalve in gevallen waar het pipelining mechanisme werd gebruikt, dat beperkingen had).
  • Header Compressie. HTTP/2 gebruikt headercompressie met het HPACK-algoritme om de grootte en hoeveelheid verzonden gegevens te verminderen. In HTTP/1.1 worden headers in platte tekst verzonden.
  • Stream Prioritering. In HTTP/2 kan de client prioriteiten aangeven voor verschillende streams (verzoeken/antwoorden), waardoor de server de volgorde van gegevenslevering kan optimaliseren. HTTP/1.1 heeft zo'n mechanisme niet.
  • Server Push. HTTP/2 stelt de server in staat om bronnen naar de client te sturen voordat deze ze aanvraagt, gebaseerd op de veronderstelling dat ze nodig zijn voor het weergeven van de pagina. In HTTP/1.1 moet de client elk resource expliciet aanvragen.
  • Frame Formaat. HTTP/2 verzendt gegevens in binair formaat (frames), wat het parseren vergemakkelijkt en de efficiëntie verhoogt in vergelijking met het tekstformaat van HTTP/1.1.

Vergelijking in tabel:

Kenmerk HTTP/1.1 HTTP/2
Verbinding Eén verbinding per verzoek (zonder pipelining) Eén verbinding voor meerdere streams
Multiplexing Nee (of beperkt door pipelining) Ja
Header Compressie Nee HPACK (binaire compressie)
Stream Prioritering Nee Ja
Server Push Nee Ja
Dataformaat Tekst Binair (frames)
Head-of-Line Blocking Aanwezig Gedeeltelijk opgelost door multiplexing

Voorbeeld van een verzoek in HTTP/1.1:

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

Voorbeeld van een gedeeltelijke weergave van gegevens in HTTP/2 (uitwisseling van frames is complexer en wordt hier niet zo eenvoudig weergegeven):

// In HTTP/2 vindt de interactie plaats op frame-niveau (HEADERS, DATA, enz.),
// die binair zijn en verborgen voor de gebruiker op applicatieniveau.
// Het is moeilijk om ze in eenvoudige tekst weer te geven, alleen voor illustratie.
// Headers worden gecomprimeerd en verzonden in het HEADERS-frame.
// Het antwoordlichaam wordt verzonden in DATA-frames.