Sobes.tech
Junior

Meséljen az HTTP verziókról és azok különbségeiről.

sobes.tech MI

Válasz az MI-től

HTTP főbb verziói:

  • HTTP/0.9: Egyszerű HTML dokumentumok átvitelére szolgáló alapverzió. Csak a GET módszert támogatta, fejlécek és válasz státuszok nélkül.
  • HTTP/1.0: Támogatást vezetett be a fejlécekhez (Content-Type, User-Agent), a POST és HEAD módszerekhez, valamint a válasz státuszokhoz. A kapcsolat minden kérés/válasz után lezárult.
  • HTTP/1.1: Jelentős fejlesztések:
    • Állandó kapcsolatok (Persistent Connections) - TCP kapcsolat újrahasznosítása több kéréshez.
    • Pipelining - több kérés küldése a válaszok várása nélkül (bár rosszul valósult meg és ritkán használják).
    • Virtuális hosztok (Host fejléc).
    • Részleges GET kérések (Range fejléc).
    • Gy cache-elés (Cache-Control, ETag, Last-Modified).
    • PUT és DELETE módszerek.
  • HTTP/2: A Google SPDY protokollján alapul. Főbb különbségek:
    • Bináris protokoll - hatékonyabb elemzés.
    • Multiplexing - több kérés/válasz párhuzamos átvitele egy TCP kapcsolaton. Megszünteti az "head-of-line blocking" problémát az HTTP/1.1 pipelining-ben.
    • Fejlécek tömörítése (HPACK) - az átvitt adatok méretének csökkentése.
    • Prioritás (Server Push) - a szerver küldhet erőforrásokat, amikre a kliens valószínűleg szüksége lesz, mielőtt kérné.
  • HTTP/3: UDP protokollon (QUIC - Quick UDP Internet Connections) alapul, a TCP helyett. A teljesítmény javítására irányul, különösen instabil hálózatokon:
    • A "head-of-line blocking" kiküszöbölése TCP szinten. Ha egy TCP csomag elveszik, minden későbbi csomag blokkolódik a re-szállításig. A QUIC (és HTTP/3) esetében csak az elveszett csomaghoz tartozó áram blokkolódik.
    • Gyorsabb kapcsolatfelvétel (0-RTT vagy 1-RTT).
    • A QUIC saját áramlás- és megbízhatóság-ellenőrző mechanizmusokat tartalmaz.

A fő különbségek táblázatban:

Funkció HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3
Protokoll TCP TCP TCP UDP (QUIC)
Formátum Szöveges Szöveges Bináris Bináris
Alapértelmezett kapcsolat Rövid életű Állandó Állandó (multiplexing) Állandó (QUIC streamek)
Multiplexing Nem Leírás (Pipelining) Igen Igen
Fejlécek tömörítése Nem Nem HPACK QPACK (a QUIC-ben)
Server Push Nem Nem Igen Igen
HOL blokk (TCP) Igen (kérési szinten) Igen (kérési szinten) Igen (kapcsolati szinten) Nem (áram szinten)

HTTP/1.1 kérés példája:

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

HTTP/2 kérés példája (elméletileg, bináris formátumban):

// 1. kérés: /index.html lekérése
// :method = GET
// :path = /index.html
// :authority = www.example.com

// 2. kérés: /style.css lekérése
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ... párhuzamosan egy kapcsolaton