Definición
HTTP (siglas de Hypertext Transfer Protocol) es el protocolo de comunicación sobre el que funciona la web. Define las reglas con las que cliente (un navegador, una app móvil, otro servidor) y servidor (la máquina que aloja una web o una API) intercambian información.
Cada vez que tu navegador carga una página, envía emails con Gmail, pide datos a una app móvil o un sistema empresarial llama a otro vía API — hay HTTP por debajo. Es uno de los pilares fundacionales de internet desde 1991 y, aunque ha evolucionado (HTTP/1.1 → HTTP/2 → HTTP/3), las bases siguen siendo las mismas.
Su versión segura es HTTPS (HTTP sobre TLS) — exactamente lo mismo pero cifrado en tránsito. En 2026 toda web seria es HTTPS; HTTP "puro" sin la S es prácticamente inaceptable.
Cómo funciona
HTTP es un protocolo de petición-respuesta sin estado. El flujo básico:
- Cliente envía una petición a una URL específica indicando:
- Un método (GET, POST, PUT, DELETE, etc.)
- Headers (metadatos: autenticación, formato esperado, idioma...)
- Un body opcional con datos (formulario, JSON, archivo)
- Servidor recibe, procesa, y devuelve una respuesta con:
- Un código de estado (200 OK, 404 Not Found, 500 Error...)
- Headers de respuesta (tipo de contenido, cookies, cache)
- Un body con el contenido (HTML, JSON, imagen, vídeo...)
- La conexión se cierra (o se reutiliza para siguientes peticiones).
"Sin estado" significa que cada petición es independiente — el servidor no recuerda quién eres entre una petición y otra. Para mantener sesión se usan cookies o tokens en cada petición.
Métodos HTTP más usados
| Método | Significado | Ejemplo típico |
|---|---|---|
| GET | Leer un recurso | Cargar una página, listar productos |
| POST | Crear algo nuevo o enviar datos | Login, crear pedido |
| PUT | Reemplazar un recurso entero | Actualizar perfil completo |
| PATCH | Modificar parte de un recurso | Cambiar un solo campo |
| DELETE | Eliminar un recurso | Borrar usuario |
| HEAD | Como GET pero solo headers | Comprobar si existe |
| OPTIONS | Preguntar qué se permite | CORS preflight |
GET y HEAD son idempotentes y deben ser seguros (no cambiar nada). El resto puede modificar estado.
Códigos de estado HTTP
El código de respuesta es un número de 3 dígitos. Las categorías:
| Rango | Significado | Ejemplos clave |
|---|---|---|
| 1xx | Informativo | 100 Continue |
| 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 |
Memorízate al menos los marcados en negrita — aparecen constantemente en logs y debugging.
Ejemplo práctico
Petición HTTP real al pedir un producto:
GET /v1/productos/12345 HTTP/1.1
Host: api.imdica.es
Authorization: Bearer abc123token
Accept: application/json
User-Agent: Mozilla/5.0 ...
Respuesta del servidor:
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: max-age=300
Content-Length: 187
{
"id": 12345,
"nombre": "Fresa carburo Ø10mm",
"precio": 23.50,
"stock": 47
}
Si el producto no existe:
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": "Producto no encontrado",
"code": "PRODUCT_NOT_FOUND"
}
Si no estás autenticado:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="api"
Los códigos comunican el resultado a programas; el body comunica el detalle a humanos y a otras aplicaciones.
HTTP vs HTTPS
| HTTP | HTTPS | |
|---|---|---|
| Cifrado | No (texto plano) | Sí (TLS) |
| Puerto por defecto | 80 | 443 |
| Indicador navegador | Inseguro ⚠️ | Candado ✅ |
| SEO | Penalizado por Google | Factor positivo de ranking |
| Compatibilidad APIs modernas | Limitada | Total |
Regla: en 2026, cualquier sitio público debe ser HTTPS. Sin excepciones.
Versiones modernas
- HTTP/1.1 (1997) — la versión que todos aprendimos, una petición por conexión, headers en texto plano.
- HTTP/2 (2015) — multiplexado (muchas peticiones por conexión), compresión de headers, server push. Mejora masiva en latencia.
- HTTP/3 (2022) — sobre QUIC en lugar de TCP. Aún más rápido en redes inestables (móvil), conexiones más resistentes a cambios de red.
La mayoría de CDNs modernos (Cloudflare, Vercel, AWS CloudFront) hablan HTTP/3 ya por defecto. Tu navegador moderno también. No tienes que hacer nada especial — solo asegurarte de que tu hosting lo soporta.
Errores comunes
- Confundir GET con POST: GET sirve para leer y NO debe modificar nada. POST modifica. Los crawlers de Google asumen esto: si tu enlace
<a href>modifica estado vía GET, Google puede borrar cosas accidentalmente al indexarte. - No usar códigos de estado adecuados: devolver siempre 200 OK con
{ "error": ... }dentro hace que los clientes no detecten bien los fallos. Usa códigos HTTP correctos. - Headers Content-Type incorrectos: si tu API devuelve JSON pero pone
Content-Type: text/html, los clientes pueden no parsearlo. - Olvidar HTTPS en producción: aunque tu hosting "ofrece" HTTPS, asegúrate de que TODAS las redirecciones van a HTTPS y de que tu sitemap, robots.txt y enlaces internos usan https://.
- Confundir 401 con 403: 401 = "no sé quién eres" (falta credencial), 403 = "sé quién eres pero no puedes" (sin permisos).
Referencias
- MDN — Visión general de HTTP
- MDN — Códigos de estado HTTP
- RFC 9110 — HTTP Semantics (especificación actual)