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
GETmó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ésHEADmó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