
Referencia rápida de las cabeceras HTTP más habituales, organizadas por categoría. Cada cabecera incluye su sintaxis, los valores más comunes y una nota sobre su uso.
Cabeceras de petición
Las envía el cliente con cada petición al servidor.
# Formato de los datos que envía el cliente
Content-Type: application/json
Content-Type: application/x-www-form-urlencoded
Content-Type: multipart/form-data; boundary=----boundary
# Formatos que el cliente acepta como respuesta
Accept: application/json
Accept: text/html, application/json;q=0.9, */*;q=0.8
# Idiomas preferidos
Accept-Language: es-ES, es;q=0.9, en;q=0.8
# Codificación aceptada (compresión)
Accept-Encoding: gzip, deflate, br
# Autenticación con token JWT
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
# Autenticación básica (usuario:contraseña en base64)
Authorization: Basic dXN1YXJpbzpjb250cmFzZcOxYQ==
# Clave de API personalizada
X-API-Key: mi_clave_secreta_de_api
# Host al que va dirigida la petición
Host: api.ejemplo.com
# Origen de la petición (usado en CORS)
Origin: https://frontend.ejemplo.com
# Página desde la que se origina la petición
Referer: https://frontend.ejemplo.com/productos
# Información del cliente (navegador, SO, versión)
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
# Cookies enviadas al servidor
Cookie: sessionid=abc123; preferencias=modo_oscuro
# ID único para rastrear la petición en logs distribuidos
X-Request-ID: 550e8400-e29b-41d4-a716-446655440000
# Número de reenvíos de la petición (proxies)
X-Forwarded-For: 203.0.113.195, 70.41.3.18
# Tamaño del cuerpo en bytes
Content-Length: 348
# Versión de la API solicitada
Accept-Version: v2
Cabeceras de respuesta
Las devuelve el servidor con cada respuesta.
# Formato de los datos devueltos
Content-Type: application/json; charset=UTF-8
Content-Type: text/html; charset=UTF-8
Content-Type: image/png
# Tamaño del cuerpo en bytes
Content-Length: 1024
# Codificación aplicada al cuerpo (compresión)
Content-Encoding: gzip
# Idioma del contenido devuelto
Content-Language: es
# Fecha y hora de la respuesta
Date: Mon, 01 Jan 2024 12:00:00 GMT
# Redirección (usado con 301, 302, 307, 308)
Location: https://api.ejemplo.com/v2/usuarios/123
# Crear o actualizar una cookie en el cliente
Set-Cookie: sessionid=abc123; HttpOnly; Secure; SameSite=Strict; Max-Age=3600
Set-Cookie: preferencias=modo_oscuro; Path=/; Domain=.ejemplo.com
# Cuándo reintentar tras error 429 o 503 (en segundos o fecha)
Retry-After: 120
Retry-After: Mon, 01 Jan 2024 13:00:00 GMT
# ID de la petición para correlacionar con logs del servidor
X-Request-ID: 550e8400-e29b-41d4-a716-446655440000
# Tiempo de proceso en el servidor (diagnóstico)
X-Response-Time: 42ms
# Servidor que procesó la petición
Server: nginx/1.24.0
Cabeceras de caché
# Control principal de caché
Cache-Control: no-store # nunca almacenar en caché
Cache-Control: no-cache # revalidar siempre antes de usar
Cache-Control: max-age=3600 # válido 1 hora desde la respuesta
Cache-Control: max-age=86400, public # cacheable por proxies, 24 horas
Cache-Control: max-age=0, must-revalidate
# Identificador único de la versión del recurso
ETag: "abc123def456"
ETag: W/"abc123" # ETag débil (equivalencia aproximada)
# Fecha de la última modificación del recurso
Last-Modified: Mon, 01 Jan 2024 10:00:00 GMT
# Fecha de expiración (menos flexible que Cache-Control)
Expires: Mon, 01 Jan 2024 13:00:00 GMT
# Indica qué cabecera condiciona el contenido cacheado
Vary: Accept-Encoding
Vary: Accept-Language
Vary: Accept-Encoding, Accept-Language
# Petición condicional: solo si el recurso cambió desde la fecha
If-Modified-Since: Mon, 01 Jan 2024 10:00:00 GMT
# Petición condicional: solo si el ETag no coincide
If-None-Match: "abc123def456"
Cabeceras de seguridad
# Fuerza HTTPS para el dominio (HSTS)
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
# Política de seguridad de contenido (evita XSS)
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.ejemplo.com
Content-Security-Policy: default-src 'none'; img-src 'self'; style-src 'self'
# Impide que el navegador adivine el Content-Type
X-Content-Type-Options: nosniff
# Impide cargar la página en un iframe (clickjacking)
X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN
# Controla qué información de Referer se envía
Referrer-Policy: no-referrer
Referrer-Policy: strict-origin-when-cross-origin
Referrer-Policy: same-origin
# Activa el filtro XSS del navegador (legacy)
X-XSS-Protection: 1; mode=block
# Política de permisos de APIs del navegador
Permissions-Policy: geolocation=(), camera=(), microphone=()
Cabeceras CORS
Controlan el acceso a recursos desde dominios distintos al del servidor.
# Orígenes permitidos para hacer peticiones cross-origin
Access-Control-Allow-Origin: * # cualquiera
Access-Control-Allow-Origin: https://frontend.ejemplo.com # dominio específico
# Métodos HTTP permitidos en peticiones cross-origin
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS
# Cabeceras que el cliente puede enviar
Access-Control-Allow-Headers: Content-Type, Authorization, X-Request-ID
# Cabeceras que el cliente puede leer de la respuesta
Access-Control-Expose-Headers: X-Total-Count, X-Request-ID
# Tiempo en segundos que el navegador puede cachear la respuesta preflight
Access-Control-Max-Age: 86400
# Permite enviar cookies en peticiones cross-origin
Access-Control-Allow-Credentials: true
# (cuando es true, Allow-Origin no puede ser * )
Cabeceras de autenticación
# El servidor indica el esquema de autenticación requerido (respuesta 401)
WWW-Authenticate: Bearer realm="API Pre Code"
WWW-Authenticate: Basic realm="Área restringida"
WWW-Authenticate: Bearer realm="api", error="invalid_token", error_description="Token expirado"
# En proxies (respuesta 407)
Proxy-Authenticate: Basic realm="Proxy corporativo"
# Respuesta del cliente al reto de autenticación
Proxy-Authorization: Basic dXN1YXJpbzpwYXNz
Cabeceras de conexión y transferencia
# Mantener la conexión TCP abierta para varias peticiones
Connection: keep-alive
Connection: close
# Solicitar upgrade de protocolo (WebSocket)
Connection: Upgrade
Upgrade: websocket
# Enviar la respuesta en trozos (streaming)
Transfer-Encoding: chunked
# Tiempo máximo de inactividad para conexiones keep-alive
Keep-Alive: timeout=5, max=1000
Cabeceras de rango (descargas parciales)
# El cliente pide un fragmento del recurso (útil en descargas reanudables)
Range: bytes=0-1023 # primeros 1024 bytes
Range: bytes=1024-2047 # segundo bloque de 1024 bytes
Range: bytes=-512 # últimos 512 bytes
# El servidor confirma que soporta rangos
Accept-Ranges: bytes
# El servidor devuelve el fragmento solicitado (respuesta 206)
Content-Range: bytes 0-1023/10240 # rango devuelto / tamaño total