Sobes.tech
Junior

Cuéntenos sobre las versiones de HTTP y sus diferencias.

sobes.tech AI

Respuesta de la IA

Versiones principales de HTTP:

  • HTTP/0.9: Versión básica para la transmisión de documentos HTML simples. Solo soportaba el método GET, sin encabezados ni estados de respuesta.
  • HTTP/1.0: Se introdujo soporte para encabezados (Content-Type, User-Agent), métodos POST y HEAD, y estados de respuesta. La conexión se cerraba después de cada solicitud/respuesta.
  • HTTP/1.1: Mejoras significativas:
    • Conexiones persistentes (Persistent Connections) - reutilización de la conexión TCP para varias solicitudes.
    • Pipelining - envío de múltiples solicitudes sin esperar la respuesta a la anterior (aunque mal implementado y poco usado).
    • Hosts virtuales (encabezado Host).
    • Solicitudes GET parciales (encabezado Range).
    • Caché (Cache-Control, ETag, Last-Modified).
    • Métodos PUT y DELETE.
  • HTTP/2: Protocolo basado en SPDY de Google. Diferencias principales:
    • Protocolo binario en lugar de texto - análisis más eficiente.
    • Multiplexación - envío paralelo de varias solicitudes/respuestas en una sola conexión TCP. Elimina el problema de "head-of-line blocking" en HTTP/1.1 pipelining.
    • Compresión de encabezados (HPACK) - reducción del tamaño de los datos transmitidos.
    • Priorización (Server Push) - el servidor puede enviar recursos que probablemente necesitará el cliente antes de que los solicite.
  • HTTP/3: Basado en UDP (con QUIC - Quick UDP Internet Connections) en lugar de TCP. Enfocado en mejorar el rendimiento, especialmente en redes inestables:
    • Eliminación del "head-of-line blocking" a nivel de conexión TCP. Si se pierde un paquete en TCP, todos los siguientes se bloquean hasta su reenvío. En QUIC (y HTTP/3), solo se bloquea el flujo al que pertenece el paquete perdido.
    • Establecimiento de conexión más rápido (0-RTT o 1-RTT).
    • QUIC incluye sus propios mecanismos de control de flujo y confiabilidad.

Diferencias principales en la tabla:

Característica HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3
Protocolo TCP TCP TCP UDP (QUIC)
Formato Texto Texto Binario Binario
Conexión por defecto Temporal Permanente Permanente (multiplexing) Permanente (Streams QUIC)
Multiplexación No Imitación (Pipelining)
Compresión de encabezados No No HPACK QPACK (en QUIC)
Server Push No No
Bloqueo HOL (TCP) Sí (a nivel de solicitud) Sí (a nivel de solicitud) Sí (a nivel de conexión) No (a nivel de flujo)

Ejemplo de solicitud en HTTP/1.1:

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

Ejemplo de solicitud en HTTP/2 (conceptualmente, ya que es binario):

// Solicitud 1: Obtener /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com

// Solicitud 2: Obtener /style.css
// :method = GET
// :path = /style.css
// :authority = www.example.com
// ...se transmiten en paralelo en una sola conexión