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
POSTyHEAD, 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) | Sí | Sí |
| Compresión de encabezados | No | No | HPACK | QPACK (en QUIC) |
| Server Push | No | No | Sí | Sí |
| 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