HTTP (HyperText Transfer Protocol) es el protocolo de capa de aplicación que define cómo los clientes y servidores intercambian datos en la web. Cada visita a un sitio web, llamada a una API y descarga de archivos usa HTTP.
TL;DR HTTP es el conjunto de reglas que gobierna cómo los navegadores y servidores se comunican. Un navegador envía una solicitud HTTP (ej.:
GET /index.html); el servidor devuelve una respuesta HTTP con un código de estado y contenido. HTTP no tiene estado — cada solicitud es independiente. HTTPS es HTTP protegido con cifrado TLS. HTTP/1.1 (1997) abría una conexión por solicitud; HTTP/2 (2015) multiplexaba muchas solicitudes en una conexión; HTTP/3 (2022) reemplazó TCP con QUIC para menor latencia. Toda interacción web usa HTTP en su núcleo.
¿Qué es HTTP?
HTTP (HyperText Transfer Protocol) es un protocolo de capa de aplicación que define el formato y las reglas para la comunicación entre clientes (navegadores, aplicaciones, APIs) y servidores. Es la base de la World Wide Web.
HTTP opera en un modelo de solicitud-respuesta:
- Un cliente envía una solicitud HTTP a un servidor.
- El servidor procesa la solicitud y devuelve una respuesta HTTP.
HTTP no tiene estado — cada solicitud es completamente independiente. El servidor no tiene memoria de solicitudes anteriores del mismo cliente. Las cookies, sesiones y tokens se usan para mantener el estado entre solicitudes en la capa de aplicación.
HTTP se ejecuta sobre TCP (HTTP/1.1 y HTTP/2) o QUIC/UDP (HTTP/3). HTTPS es HTTP con cifrado TLS agregado en la capa de transporte.
El ciclo de solicitud-respuesta HTTP
Estructura de una solicitud HTTP
GET /products?category=shoes HTTP/1.1Host: shop.example.comAccept: application/jsonAuthorization: Bearer eyJhbGci...User-Agent: Mozilla/5.0Una solicitud HTTP tiene cuatro partes:
- Línea de solicitud — método, ruta, versión HTTP
- Headers — metadatos sobre la solicitud (host, tipo de contenido, autenticación)
- Línea en blanco — separa los headers del cuerpo
- Cuerpo (opcional) — datos enviados con solicitudes POST, PUT, PATCH
Estructura de una respuesta HTTP
HTTP/1.1 200 OKContent-Type: application/jsonContent-Length: 342Cache-Control: max-age=3600
{"products": [...]}Una respuesta HTTP tiene:
- Línea de estado — versión HTTP, código de estado, frase de razón
- Headers — metadatos sobre la respuesta
- Línea en blanco
- Cuerpo — el contenido solicitado
Métodos HTTP
Los métodos HTTP (también llamados verbos) definen la acción prevista de la solicitud:
| Método | Propósito | Tiene cuerpo | Idempotente | Seguro |
|---|---|---|---|---|
GET | Recuperar un recurso | No | Sí | Sí |
POST | Crear un recurso o enviar datos | Sí | No | No |
PUT | Reemplazar un recurso por completo | Sí | Sí | No |
PATCH | Actualizar parcialmente un recurso | Sí | No | No |
DELETE | Eliminar un recurso | No | Sí | No |
HEAD | Igual que GET pero sin cuerpo de respuesta | No | Sí | Sí |
OPTIONS | Descubrir capacidades del servidor (usado en preflight CORS) | No | Sí | Sí |
Idempotente significa que hacer la misma solicitud varias veces produce el mismo resultado. Seguro significa que el método no cambia el estado del servidor.
Códigos de estado HTTP
Los códigos de estado son números de tres dígitos que le dicen al cliente el resultado de la solicitud:
| Rango | Categoría | Ejemplos comunes |
|---|---|---|
| 1xx | Informativo | 100 Continue, 101 Switching Protocols |
| 2xx | Éxito | 200 OK, 201 Created, 204 No Content |
| 3xx | Redirección | 301 Moved Permanently, 302 Found, 304 Not Modified |
| 4xx | Error del cliente | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 429 Too Many Requests |
| 5xx | Error del servidor | 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable, 504 Gateway Timeout |
El primer dígito define la categoría. 4xx significa que el cliente cometió un error. 5xx significa que el servidor falló.
Headers HTTP clave
Headers de solicitud
| Header | Propósito | Ejemplo |
|---|---|---|
Host | Dominio del servidor de destino | Host: api.example.com |
Authorization | Credenciales de autenticación | Authorization: Bearer <token> |
Content-Type | Formato del cuerpo de la solicitud | Content-Type: application/json |
Accept | Formatos que el cliente puede manejar | Accept: application/json |
Cache-Control | Directivas de caché | Cache-Control: no-cache |
User-Agent | Identificador del software cliente | User-Agent: Mozilla/5.0 |
Headers de respuesta
| Header | Propósito | Ejemplo |
|---|---|---|
Content-Type | Formato del cuerpo de la respuesta | Content-Type: text/html; charset=utf-8 |
Cache-Control | Cuánto tiempo almacenar en caché la respuesta | Cache-Control: max-age=3600 |
Location | URL de destino de la redirección | Location: https://example.com/new |
Set-Cookie | Establecer una cookie en el cliente | Set-Cookie: session=abc; HttpOnly |
Strict-Transport-Security | Imponer HTTPS | Strict-Transport-Security: max-age=31536000 |
Comparación de versiones HTTP
| Característica | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| Año | 1997 | 2015 | 2022 |
| Transporte | TCP | TCP | QUIC (UDP) |
| Multiplexación | No (una solicitud por conexión) | Sí (muchas solicitudes por conexión) | Sí |
| Compresión de headers | No | Sí (HPACK) | Sí (QPACK) |
| Bloqueo head-of-line | Sí | Sí (a nivel TCP) | No |
| TLS requerido | No | En la práctica sí (los navegadores lo requieren) | Sí (integrado) |
| Configuración de conexión | Handshake TCP | Handshake TCP + TLS | QUIC (1-RTT o 0-RTT) |
HTTP/1.1 abre una nueva conexión TCP para cada solicitud (o reutiliza conexiones con keep-alive, pero aún serializa las solicitudes). HTTP/2 envía múltiples solicitudes simultáneamente sobre una sola conexión. HTTP/3 elimina el bloqueo head-of-line de TCP usando QUIC sobre UDP — la pérdida de paquetes en un stream no detiene a los demás.
HTTP vs HTTPS
| HTTP | HTTPS | |
|---|---|---|
| Puerto | 80 | 443 |
| Cifrado | Ninguno | TLS |
| Autenticación | Ninguna | Certificado del servidor |
| Integridad de datos | No garantizada | Garantizada por TLS |
| SEO | Penalizado por Google | Requerido para posicionamiento |
| Indicador del navegador | Advertencia “No seguro” | Ícono de candado |
HTTPS es HTTP con una capa TLS agregada. El handshake TLS ocurre antes de que fluya cualquier dato HTTP. Todo el contenido HTTP — incluyendo headers, cookies y cuerpos de solicitud — está cifrado en HTTPS.
Preguntas frecuentes
¿Qué es HTTP en términos simples? HTTP es el lenguaje que usan los navegadores y servidores web para comunicarse. Cuando escribes una URL y presionas Enter, tu navegador envía una solicitud HTTP pidiendo esa página. El servidor devuelve una respuesta HTTP que contiene el HTML. HTTP define el formato de ambos mensajes.
¿Cuál es la diferencia entre HTTP y HTTPS? HTTPS es HTTP con cifrado TLS. En HTTP, todos los datos viajan en texto plano — cualquiera entre tú y el servidor puede leerlos. En HTTPS, TLS cifra la conexión para que solo el cliente y el servidor puedan leer los datos. Los navegadores modernos requieren HTTPS y advierten a los usuarios sobre los sitios HTTP.
¿Qué significa que HTTP no tenga estado? Que HTTP no tenga estado significa que cada solicitud es completamente independiente — el servidor no recuerda solicitudes anteriores del mismo cliente. Cada solicitud debe contener toda la información necesaria para procesarla. Las aplicaciones mantienen el estado (como sesiones de inicio de sesión) usando cookies, tokens o sesiones del lado del servidor sobre HTTP.
¿Cuál es la diferencia entre GET y POST? GET recupera datos y no debe tener efectos secundarios — es seguro e idempotente. Los parámetros GET van en la URL. POST envía datos al servidor (creando o modificando recursos) y tiene un cuerpo de solicitud. POST no es idempotente — llamarlo dos veces crea dos recursos.
¿Qué significa un error 404? Un error 404 Not Found significa que el servidor recibió y entendió la solicitud, pero no pudo encontrar el recurso solicitado. El recurso puede que nunca haya existido, puede haber sido eliminado, o la URL puede ser incorrecta. Es un error del cliente (4xx) porque el cliente solicitó algo que no está ahí.
¿Qué es HTTP/2 y por qué es más rápido? HTTP/2 introdujo la multiplexación — enviando múltiples solicitudes simultáneamente sobre una sola conexión TCP. HTTP/1.1 enviaba solicitudes de una en una por conexión (o abría muchas conexiones paralelas). HTTP/2 también comprime headers (HPACK) y permite que los servidores envíen recursos de forma proactiva. El resultado es significativamente menos sobrecarga de conexión y cargas de página más rápidas.
¿Qué es HTTP/3? HTTP/3 reemplaza TCP con QUIC, un protocolo de transporte construido sobre UDP. QUIC integra TLS 1.3 directamente, reduciendo la configuración de conexión a 1-RTT (o 0-RTT para conexiones de retorno). Elimina el bloqueo head-of-line — en HTTP/2 sobre TCP, un paquete perdido detiene todos los streams; QUIC maneja cada stream de forma independiente. HTTP/3 es especialmente beneficioso en redes móviles donde la pérdida de paquetes es común.
¿Qué es un header HTTP? Un header HTTP es un par clave-valor enviado en una solicitud o respuesta HTTP que proporciona metadatos. Los headers de solicitud le dicen al servidor sobre el cliente (idioma Accept, token de Authorization, Content-Type del cuerpo). Los headers de respuesta le dicen al cliente sobre la respuesta (Content-Type del cuerpo, directivas Cache-Control, políticas de seguridad como HSTS).