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
pipeliningmechanisme 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.