Junior
Vorbiți despre versiunile HTTP și diferențele dintre ele.
sobes.tech AI
Răspuns de la AI
Versiuni principale ale HTTP:
- HTTP/0.9: Versiunea de bază pentru transmiterea documentelor HTML simple. suporta doar metoda
GET, fără anteturi sau stări de răspuns. - HTTP/1.0: A fost introdus suportul pentru anteturi (Content-Type, User-Agent), metodele
POSTșiHEAD, și stări de răspuns. Conexiunea se închidea după fiecare solicitare/răspuns. - HTTP/1.1: Îmbunătățiri semnificative:
- Conexiuni persistente - reutilizarea conexiunii TCP pentru mai multe solicitări.
- Pipelining - trimiterea mai multor solicitări fără a aștepta răspunsul anterior (prost implementat și rar folosit).
- Host-uri virtuale (antetul Host).
- Solicitări GET parțiale (antetul Range).
- Caching (Cache-Control, ETag, Last-Modified).
- Metodele PUT și DELETE.
- HTTP/2: Protocol bazat pe SPDY de la Google. Diferențe principale:
- Protocol binar în loc de text - analiză mai eficientă.
- Multiplexare - transmitere paralelă a mai multor solicitări/răspunsuri pe o singură conexiune TCP. Elimină problema "head-of-line blocking" în pipelining-ul HTTP/1.1.
- Comprimarea anteturilor (HPACK) - reducerea dimensiunii datelor transmise.
- Prioritizare (Server Push) - serverul poate trimite resurse pe care clientul probabil le va avea nevoie înainte ca acesta să le solicite.
- HTTP/3: Bazat pe UDP (cu QUIC - Quick UDP Internet Connections) în loc de TCP. Se concentrează pe îmbunătățirea performanței, mai ales în rețele instabile:
- Eliminarea "head-of-line blocking" la nivelul conexiunii TCP. Dacă un pachet se pierde în TCP, toate pachetele următoare sunt blocate până la retransmiterea sa. În QUIC (și HTTP/3), doar fluxul la care aparține pachetul pierdut este blocat.
- Stabilirea conexiunii mai rapidă (0-RTT sau 1-RTT).
- QUIC include propriile mecanisme de control al fluxului și fiabilitate.
Diferențe principale în tabel:
| Caracteristică | HTTP/1.0 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|---|
| Protocol | TCP | TCP | TCP | UDP (QUIC) |
| Format | Text | Text | Binare | Binare |
| Conexiune implicită | Temporară | Permanentă | Permanentă (multiplexare) | Permanentă (Streams QUIC) |
| Multiplexare | Nu | Imitare (Pipelining) | Da | Da |
| Comprimare anteturi | Nu | Nu | HPACK | QPACK (în QUIC) |
| Server Push | Nu | Nu | Da | Da |
| Blocare HOL (TCP) | Da (la nivelul solicitării) | Da (la nivelul solicitării) | Da (la nivelul conexiunii) | Nu (la nivelul fluxului) |
Exemplu de solicitare în HTTP/1.1:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/7.64.1
Accept: */*
Exemplu de solicitare în HTTP/2 (concepțional, deoarece este binar):
// Solicitare 1: Obține /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com
// Solicitare 2: Obține /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...transmise în paralel pe o singură conexiune