¿Qué es HTTP?
HTTP (HyperText Transfer Protocol) es la forma en que los clientes y los servidores se comunican en la web. Un cliente envía una request describiendo lo que necesita; un servidor envía una response describiendo lo que sucedió. Cada carga de página, llamada a una API, imagen y fuente viaja de esta manera.
Es un protocolo simple, basado en texto y stateless (sin estado): cada request es independiente y el servidor no recuerda las anteriores, a menos que algo como una cookie transporte ese estado. Esa simplicidad es la razón por la cual HTTP ha escalado a toda la web.
Requests
Una solicitud tiene un método, una ruta, encabezados y, en ocasiones, un cuerpo.
POST /api/users HTTP/2
Host: example.com
Content-Type: application/json
Accept: application/json
Authorization: Bearer <token>
{ "name": "Ada" }
El método indica qué tipo de acción se está realizando. La ruta identifica el recurso. Los encabezados transportan metadatos y el cuerpo transporta los datos para métodos como POST y PUT.
| Método | Propósito | Seguro | Idempotente |
|---|---|---|---|
| GET | Leer un recurso | Sí | Sí |
| POST | Crear o activar | No | No |
| PUT | Reemplazar un recurso | No | Sí |
| PATCH | Actualizar parcialmente | No | No |
| DELETE | Eliminar un recurso | No | Sí |
Seguro significa que no cambia el estado; idempotente significa que repetirlo tiene el mismo efecto que hacerlo una sola vez. Estas propiedades son importantes para el almacenamiento en caché, los reintentos y los proxies.
Respuestas y códigos de estado
Una respuesta tiene un código de estado, encabezados y un cuerpo.
HTTP/2 201 Created
Content-Type: application/json
Location: /api/users/42
{ "id": 42, "name": "Ada" }
El código de estado le indica al cliente qué sucedió. Aprende los más comunes:
- 200 OK — éxito.
- 201 Created — se creó un nuevo recurso.
- 204 No Content — éxito sin cuerpo de respuesta.
- 301 / 302 — redirecciones permanentes y temporales.
- 304 Not Modified — la copia en caché sigue siendo válida.
- 400 Bad Request — entrada inválida.
- 401 Unauthorized — no autenticado.
- 403 Forbidden — autenticado pero sin permisos.
- 404 Not Found — el recurso no existe.
- 500 Internal Server Error — el servidor falló.
Devolver el código correcto no es un capricho: los clientes, las cachés y el monitoreo dependen de ello.
Headers
Los headers son la capa de metadatos. Algunos headers de solicitud comunes incluyen Accept, Content-Type, Authorization, Cookie y User-Agent. Los headers de respuesta comunes incluyen Content-Type, Content-Length, Cache-Control, Set-Cookie y headers de seguridad como Content-Security-Policy.
// fetch.js
const res = await fetch("/api/posts", {
headers: {
Accept: "application/json",
Authorization: `Bearer ${token}`,
},
});
Los headers son la forma en que se expresan la negociación de contenido, la autenticación, el almacenamiento en caché y las políticas de seguridad.
Cookies y sesiones
HTTP no tiene estado (stateless), por lo que los servidores utilizan cookies para reconocer a los usuarios que regresan. El servidor envía Set-Cookie y el navegador devuelve esa cookie en las solicitudes posteriores al mismo origen.
Las cookies de sesión siempre deben ser:
Set-Cookie: session=abc123; HttpOnly; Secure; SameSite=Lax; Path=/
- HttpOnly evita que JavaScript pueda leerla, lo que mitiga los ataques XSS.
- Secure hace que se envíe únicamente a través de HTTPS.
- SameSite limita el envío entre sitios, lo que ayuda a prevenir CSRF.
La guía de Seguridad Web cubre el panorama completo.
Caching
El caching es la característica de HTTP más valiosa para el rendimiento. Dos mecanismos trabajan en conjunto:
- Freshness (frescura) con
Cache-Control, que define cuánto tiempo se puede reutilizar una respuesta. - Validation (validación) con
ETagoLast-Modified, que permite al cliente preguntar “¿ha cambiado esto?” y recibir un304 Not Modifiedcuando no ha habido cambios.
# versioned assets: cache for a year
Cache-Control: public, max-age=31536000, immutable
# HTML: revalidate every time
Cache-Control: no-cache
Aplica fingerprinting a tus assets mediante un hash de contenido y almacénalos en caché de forma agresiva; si un archivo cambia, recibirá un nombre nuevo. Sirve el HTML con un tiempo de caché corto y revalida para que los despliegues se apliquen inmediatamente.
HTTPS y TLS
HTTPS es HTTP sobre TLS. TLS realiza tres funciones:
- Cifra el tráfico para que no pueda ser leído durante el tránsito.
- Autentica el servidor mediante un certificado.
- Preserva la integridad para que los datos no puedan ser alterados silenciosamente.
Obtén un certificado (existen opciones gratuitas), redirige todo el tráfico HTTP a HTTPS y habilita HSTS para evitar que los navegadores utilicen HTTP sin cifrar en tu dominio. Trata el HTTP como un protocolo legado.
Versiones de HTTP
- HTTP/1.1 — una solicitud a la vez por conexión, razón por la cual antes se solía concatenar los archivos en los sitios web.
- HTTP/2 — multiplexa múltiples solicitudes sobre una sola conexión y comprime los headers, eliminando la mayoría de esos trucos.
- HTTP/3 — se ejecuta sobre QUIC, un transporte basado en UDP, reduciendo la latencia de conexión y gestionando mejor la pérdida de paquetes.
Servir HTTPS generalmente habilita HTTP/2 o HTTP/3 automáticamente a través de tu servidor o CDN. Rara vez es necesario modificar tu código.
Mejores prácticas
- Usa HTTPS en todas partes y redirige el tráfico HTTP a HTTPS mediante HSTS.
- Devuelve códigos de estado precisos y cuerpos de error significativos.
- Mantén los métodos seguros e idempotentes según sus definiciones.
- Configura
Cache-Controly validadores de manera deliberada. - Usa cookies HttpOnly, Secure y SameSite para las sesiones.
- Configura cabeceras de seguridad como CSP y
X-Content-Type-Options. - Prioriza HTTP/2 o HTTP/3 y deja que la plataforma lo negocie.
Errores comunes
- Devolver un código 200 en caso de error, lo que provoca fallos en los clientes y en las cachés.
- Mutar datos mediante GET, lo cual es inseguro y puede ser almacenado en caché o precargado.
- Desactivar la caché para todo, afectando negativamente al rendimiento.
- Almacenar tokens de sesión en
localStorageen lugar de una cookie. - Olvidar redireccionar el tráfico HTTP a HTTPS.
- Ignorar
Content-Typey recibir errores de parseo.
Próximos pasos
HTTP es el lenguaje compartido de la web, y dominarlo es fundamental en cualquier proyecto. Refuerza tus conocimientos con los fundamentos de internet, comprende cómo funciona DNS, realiza peticiones desde JavaScript con Fetch y protege tu tráfico con la guía de seguridad web.