Sobes.tech
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 și HEAD, ș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