Seguridad web

HTTP

Se lee en aproximadamente 5 minutos

Qué es HTTP

HTTP (HyperText Transfer Protocol) es el protocolo de comunicación entre navegadores web y servidores. Originado en 1991 con HTTP/0.9 diseñado por Tim Berners-Lee para transferir documentos HTML, hoy se usa para todo tipo de recursos web: imágenes, vídeo, datos JSON y respuestas API. Su especificación se reorganizó en junio de 2022 en los RFC 9110 (semántica HTTP), 9111 (caché) y 9112 (sintaxis de mensajes HTTP/1.1), que dejaron obsoletos el RFC 2616 y la serie RFC 7230.

Al introducir una URL en el navegador, se envía una solicitud HTTP al servidor, que devuelve una respuesta HTTP. HTTP es sin estado (stateless): cada solicitud se procesa independientemente. Para mantener sesiones de login se usan cookies o tokens de autenticación.

Estructura de solicitud y respuesta

Solicitud
Método (GET, POST, PUT, DELETE) especifica la operación. Ruta URL indica el recurso. Encabezados contienen metadatos (User-Agent, Accept, Authorization). POST y PUT incluyen cuerpo con datos.
Respuesta
Código de estado (200, 404, 500) indica el resultado. Encabezados incluyen Content-Type, Cache-Control y encabezados de seguridad. Cuerpo contiene HTML, JSON, binario de imagen, etc.

GET obtiene recursos y normalmente no lleva cuerpo: el RFC 9110 señala que el contenido de una solicitud GET no tiene una semántica definida de forma general y que un cliente no debería enviarlo. POST envía datos (formularios, llamadas API). En REST APIs también se usan PUT (actualizar), DELETE (eliminar) y PATCH (actualización parcial).

Principales códigos de estado

2xx (Éxito)
200 OK solicitud exitosa. 201 Created recurso creado. 204 No Content éxito sin cuerpo de respuesta.
3xx (Redirección)
301 Moved Permanently cambio permanente de URL; Google explica que su proceso de indexación toma la redirección como señal de que la URL de destino es la canónica. 302 Found redirección temporal. 304 Not Modified caché válida.
4xx (Error del cliente)
400 Bad Request error de sintaxis. 401 Unauthorized requiere autenticación. 403 Forbidden sin permisos. 404 Not Found recurso inexistente. 429 Too Many Requests límite de tasa excedido.
5xx (Error del servidor)
500 Internal Server Error error genérico del servidor. 502 Bad Gateway respuesta inválida del backend. 503 Service Unavailable servidor temporalmente no disponible.

Versiones y evolución de HTTP

HTTP/1.1 (1997)
En agosto de 2026 sigue ampliamente usado. Definido en enero de 1997 por el RFC 2068 y reorganizado en junio de 2022 en el RFC 9112. Keep-Alive, transferencia chunked, Host header. Pero solo una solicitud simultánea por conexión TCP (Head-of-Line Blocking).
HTTP/2 (2015)
Basado en SPDY de Google, estandarizado en mayo de 2015 por el RFC 7540 y revisado en junio de 2022 en el RFC 9113. Multiplexación: múltiples solicitudes/respuestas en paralelo sobre una conexión TCP. Compresión de encabezados (HPACK). La especificación también define el server push, pero Chrome lo desactivó de forma predeterminada en Chrome 106 (septiembre de 2022) y recomienda usar 103 Early Hints. El Head-of-Line Blocking a nivel TCP persiste.
HTTP/3 (2022)
Estandarizado en junio de 2022 por el RFC 9114. Usa QUIC (RFC 9000, sobre UDP) eliminando el Head-of-Line Blocking a nivel TCP. El saludo de la primera conexión es de 1-RTT y con un servidor ya visitado se puede reanudar con 0-RTT. Como la sesión se identifica por un identificador de conexión y no por la dirección IP, resiste los cambios entre Wi-Fi y red móvil. El servidor anuncia su disponibilidad con encabezados como Alt-Svc y los clientes sin soporte vuelven a HTTP/2 o a versiones anteriores.

HTTP/2 y HTTP/3 requieren HTTPS en la práctica. Los navegadores principales no soportan HTTP/2 sin cifrar, y HTTP/3 incorpora TLS 1.3 en QUIC.

Relación entre HTTP y HTTPS

HTTP transmite en texto plano, vulnerable a interceptación y alteración. HTTPS añade cifrado TLS a HTTP, asegurando la comunicación.

  • HTTP: Puerto 80. Texto plano. En agosto de 2026 Chrome muestra el aviso "No seguro" en la barra de direcciones y, igual que Safari, intenta elevar automáticamente a HTTPS las navegaciones HTTP.
  • HTTPS: Puerto 443. Comunicación cifrada con TLS. Google anunció en agosto de 2014 que empezaba a usar HTTPS como señal de posicionamiento y precisó entonces que era "una señal muy ligera, que afecta a menos del 1 % de las consultas globales".

Aunque HTTPS es el estándar de facto, HTTP sigue siendo el protocolo base y HTTPS es su extensión cifrada. El modelo de solicitud/respuesta, métodos y códigos de estado de HTTP se usan igual en HTTPS.

Un error frecuente en la práctica es juzgar si la comunicación está cifrada por el aspecto de la barra de direcciones. Chrome retiró el candado en Chrome 117 (septiembre de 2023) y lo sustituyó por un icono "tune" que abre la configuración del sitio, así que lo que conviene comprobar es si el esquema de la URL es https://. Además, HTTPS solo garantiza el cifrado del canal y la identidad del dominio al que se conecta: no garantiza que quien opera el sitio sea de fiar, porque un sitio de phishing también puede activar HTTPS con un certificado gratuito.

Conceptos erróneos comunes

HTTP y HTTPS son protocolos completamente diferentes
HTTPS es HTTP con cifrado TLS añadido. La estructura de solicitudes/respuestas, métodos y códigos de estado son idénticos. La diferencia está en la capa de cifrado TLS y en lo que conlleva: el esquema de la URL y el puerto predeterminado (80 y 443).
HTTP/2 o HTTP/3 siempre aceleran el sitio
Mejoran la eficiencia de comunicación, pero si el cuello de botella es el procesamiento del servidor, consultas a BD o renderizado del frontend, la velocidad percibida puede no cambiar.
HTTP es tecnología obsoleta que ya no se usa
Aunque HTTPS es el estándar de facto en los sitios públicos, en agosto de 2026 HTTP sigue usándose directamente en desarrollo local, intranets y comunicación entre dispositivos IoT. Además, la propia especificación de HTTP es la base sobre la que funciona HTTPS.
Compartir

Términos relacionados

Artículos relacionados