Las cabeceras HTTP son las líneas etiquetadas que se envían antes del cuerpo de cada petición y respuesta. Llevan el tipo de contenido, las reglas de caché, las cookies, las credenciales y las políticas de seguridad. Vea las cabeceras que envía cualquier sitio con el Visor de Cabeceras HTTP y puntúe las cabeceras de seguridad de un sitio con el Analizador de Encabezados de Seguridad.
Cabeceras de petición
| Cabecera | Propósito |
|---|---|
Host |
El sitio solicitado (obligatorio en HTTP/1.1) |
User-Agent |
Identifica el navegador o programa cliente |
Accept |
Tipos de contenido que el cliente admite, como text/html o application/json |
Accept-Language |
Idiomas preferidos, por ejemplo es-ES,es;q=0.9,en;q=0.8 |
Accept-Encoding |
Compresión que entiende el cliente (gzip, br) |
Authorization |
Credenciales, como Bearer <token> o Basic <base64> |
Cookie |
Cookies que el navegador devuelve al sitio |
Content-Type |
Formato del cuerpo de la petición (application/json, multipart/form-data) |
Origin |
De dónde viene una petición entre sitios; lo usan CORS y las comprobaciones CSRF |
Referer |
La página anterior (la falta de ortografía es histórica) |
If-None-Match |
Envía el cuerpo solo si el ETag cambió |
Range |
Pide una parte de un archivo, como bytes=0-1023 |
Cabeceras de respuesta
| Cabecera | Propósito |
|---|---|
Content-Type |
Formato del cuerpo, con juego de caracteres para texto: text/html; charset=utf-8 |
Content-Length |
Tamaño del cuerpo en bytes |
Content-Encoding |
Compresión aplicada al cuerpo (gzip, br) |
Location |
A dónde ir después; se usa con 201 y las redirecciones 3xx |
Set-Cookie |
Guarda una cookie (vea los atributos abajo) |
WWW-Authenticate |
Cómo autenticarse tras un 401 |
Retry-After |
Cuándo reintentar tras 429 o 503 (segundos o una fecha) |
ETag |
Etiqueta de versión del contenido, para validar la caché |
Last-Modified |
Cuándo cambió el contenido por última vez |
Vary |
Cabeceras de petición que cambian la respuesta, para que las cachés guarden copias separadas (Vary: Accept-Encoding) |
Cache-Control
| Directiva | Significado |
|---|---|
max-age=<seconds> |
Vigente durante estos segundos, sin preguntar |
s-maxage=<seconds> |
Como max-age, pero para cachés compartidas como las CDN |
no-cache |
Se puede guardar, pero hay que revalidarla con el servidor antes de cada reutilización |
no-store |
No guardarla en ningún sitio (datos sensibles) |
public / private |
private significa que solo el navegador del usuario puede guardarla, no las cachés compartidas |
immutable |
El archivo nunca cambiará en esta URL, así que no revalide |
must-revalidate |
Una vez caducada, no servirla sin consultar al servidor |
stale-while-revalidate=<seconds> |
Sirve la copia caducada mientras obtiene una nueva en segundo plano |
Recetas habituales: los archivos estáticos con huella (app.3f9a1c.js) usan public, max-age=31536000, immutable; las páginas HTML usan no-cache; los datos personales usan no-store.
Cabeceras de seguridad
| Cabecera | Valor típico | Propósito |
|---|---|---|
Strict-Transport-Security |
max-age=31536000; includeSubDomains |
Hace que los navegadores usen solo HTTPS en este sitio |
Content-Security-Policy |
default-src 'self' |
Limita de dónde pueden cargarse scripts, estilos e imágenes; la defensa principal contra XSS |
X-Content-Type-Options |
nosniff |
Impide que los navegadores adivinen otro tipo de contenido |
X-Frame-Options |
DENY or SAMEORIGIN |
Bloquea que la página se incruste en un marco (frame-ancestors de CSP es el equivalente moderno) |
Referrer-Policy |
strict-origin-when-cross-origin |
Controla cuánta URL se envía en Referer |
Permissions-Policy |
camera=(), microphone=() |
Desactiva funciones del navegador que la página no necesita |
El Generador de Encabezado CSP ayuda a construir una política, y Política de seguridad de contenido (CSP) explica de qué protege.
Atributos de cookie
Se fijan con Set-Cookie: nombre=valor; Secure; HttpOnly; SameSite=Lax.
| Atributo | Significado |
|---|---|
Secure |
Solo se envía por HTTPS |
HttpOnly |
Oculta para JavaScript, lo que limita lo que puede robar un ataque XSS |
SameSite=Lax | Strict | None |
Controla el envío de la cookie en peticiones entre sitios; Lax es un buen valor por defecto y None exige Secure |
Max-Age / Expires |
Cuánto dura; sin ellos termina con la sesión del navegador |
Domain / Path |
Qué hosts y rutas lo reciben |
Cabeceras CORS
Los navegadores impiden que una página lea la respuesta de otro origen salvo que ese origen lo autorice. Para cualquier cosa más allá de una petición simple, el navegador envía antes una comprobación previa OPTIONS.
| Cabecera | Propósito |
|---|---|
Access-Control-Allow-Origin |
Qué origen puede leer la respuesta (* para cualquiera, o un origen exacto) |
Access-Control-Allow-Methods |
Métodos permitidos en la respuesta de la comprobación previa |
Access-Control-Allow-Headers |
Cabeceras de petición permitidas en la comprobación previa |
Access-Control-Allow-Credentials |
true permite que la petición lleve cookies; no se puede combinar con * |
Los nombres de cabecera no distinguen mayúsculas (content-type es igual que Content-Type), pero sus valores a menudo sí. Para los códigos de estado, vea Guía rápida de códigos de estado HTTP.