Sobes.tech
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 POST en HEAD, 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