Junior
Vertel over de versies van HTTP en hun verschillen.
sobes.tech AI
Antwoord van AI
Belangrijkste versies van HTTP:
- HTTP/0.9: Basisversie voor het overdragen van eenvoudige HTML-documenten. Ondersteunde alleen de
GET-methode, zonder headers of antwoordstatussen. - HTTP/1.0: Ondersteuning voor headers (Content-Type, User-Agent), methoden
POSTenHEAD, en antwoordstatussen. De verbinding werd na elke aanvraag/antwoord gesloten. - HTTP/1.1: Belangrijke verbeteringen:
- Persistentieverbindingen - hergebruik van TCP-verbinding voor meerdere verzoeken.
- Pipelining - verzenden van meerdere verzoeken zonder te wachten op de vorige (slecht geïmplementeerd en zelden gebruikt).
- Virtuele hosts (Host-header).
- Gedeeltelijke GET-verzoeken (Range-header).
- Caching (Cache-Control, ETag, Last-Modified).
- Methoden PUT en DELETE.
- HTTP/2: Protocol gebaseerd op Google's SPDY. Belangrijkste verschillen:
- Binaire protocol in plaats van tekst - efficiëntere parsing.
- Multiplexing - gelijktijdige verzending van meerdere verzoeken/antwoorden over één TCP-verbinding. Verwijdert het "head-of-line blocking"-probleem.
- Header-compressie (HPACK) - vermindert de grootte van de verzonden gegevens.
- Prioritering (Server Push) - server kan bronnen sturen die de client waarschijnlijk nodig heeft voordat deze ze aanvraagt.
- HTTP/3: Gebaseerd op UDP (met QUIC - Quick UDP Internet Connections) in plaats van TCP. Gericht op prestatieverbetering, vooral in onstabiele netwerken:
- Verwijdering van "head-of-line blocking" op verbindingsniveau. Bij verlies van een pakket in TCP worden alle volgende pakketten geblokkeerd tot de hertransmissie. In QUIC (en HTTP/3) wordt alleen de stroom geblokkeerd waartoe het verloren pakket behoort.
- Snellere verbinding tot stand brengen (0-RTT of 1-RTT).
- QUIC bevat eigen mechanismen voor stroomcontrole en betrouwbaarheid.
Belangrijkste verschillen in de tabel:
| Functie | HTTP/1.0 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|---|
| Protocol | TCP | TCP | TCP | UDP (QUIC) |
| Formaat | Tekst | Tekst | Binair | Binair |
| Standaardverbinding | Kortdurend | Permanent | Permanent (multiplexing) | Permanent (Streams QUIC) |
| Multiplexing | Nee | Imitatie (Pipelining) | Ja | Ja |
| Headercompressie | Nee | Nee | HPACK | QPACK (in QUIC) |
| Server Push | Nee | Nee | Ja | Ja |
| HOL-blokkering (TCP) | Ja (op verzoekniveau) | Ja (op verzoekniveau) | Ja (op verbindingsniveau) | Nee (op stroomniveau) |
Voorbeeld van verzoek in HTTP/1.1:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/7.64.1
Accept: */*
Voorbeeld van verzoek in HTTP/2 (conceptueel, omdat binair):
// Verzoek 1: Ophalen /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com
// Verzoek 2: Ophalen /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...worden parallel over één verbinding verzonden