Skip to main content

Funcionamiento de las Cabeceras HTTP

Las cabeceras HTTP son metadatos que proporcionan información contextual sobre la petición o respuesta. Actúan como "instrucciones de configuración" para la comunicación entre cliente y servidor.

Estructura de las Cabeceras

FORMATO: Nombre-Cabecera: valor1, valor2, valor3

CARACTERÍSTICAS:

  • Sensibles a mayúsculas/minúsculas en el nombre (por convención se usan Pascal-Case)
  • Valores separados por comas para múltiples valores
  • Líneas separadas por CRLF (Carriage Return Line Feed)

EJEMPLO:

Content-Type: application/json; charset=utf-8
Cache-Control: no-cache, no-store
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

Clasificación de Cabeceras

1. Cabeceras de Petición (Request Headers)

Información que el cliente envía al servidor sobre sí mismo y la petición.

PRINCIPALES CABECERAS DE PETICIÓN:

CabeceraEjemploPropósito
User-AgentMozilla/5.0 (Windows NT 10.0; Win64; x64)Identificar el cliente/navegador
Acceptapplication/json, text/html;q=0.9Formatos que el cliente acepta
AuthorizationBearer token123 o Basic dXNlcjpwYXNzCredenciales de autenticación
Content-Typeapplication/jsonTipo de datos en el cuerpo
Content-Length1024Tamaño del cuerpo en bytes
Cookiesession=abc123; user=johnCookies almacenadas
Accept-Languagees-ES, es;q=0.9, en;q=0.8Idiomas preferidos
Accept-Encodinggzip, deflate, brCompresiones aceptadas

EJEMPLO COMPLETO DE PETICIÓN:

GET /api/usuarios/123 HTTP/1.1
Host: api.midominio.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Accept: application/json, text/plain;q=0.8
Accept-Language: es-ES, es;q=0.9, en;q=0.7
Accept-Encoding: gzip, deflate
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Cookie: session_id=abc123; user_preferences=dark_mode
Cache-Control: no-cache

2. Cabeceras de Respuesta (Response Headers)

Información que el servidor envía al cliente sobre la respuesta.

PRINCIPALES CABECERAS DE RESPUESTA:

CabeceraEjemploPropósito
Content-Typeapplication/json; charset=utf-8Tipo y codificación del contenido
Content-Length2048Tamaño del cuerpo de respuesta
Cache-Controlmax-age=3600, publicDirectivas de caché
Set-Cookiesession=xyz789; Path=/; HttpOnlyEstablecer cookies
Servernginx/1.18.0Información del servidor
Access-Control-Allow-Origin* o https://midominio.comControl CORS
Location/nueva-ubicacionRedirecciones (3xx)
WWW-AuthenticateBasic realm="Acceso restringido"Esquema de autenticación requerido

EJEMPLO COMPLETO DE RESPUESTA:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 245
Cache-Control: max-age=3600, public
Server: nginx/1.18.0
Set-Cookie: session_id=xyz789; Path=/; Secure; HttpOnly; SameSite=Strict
Access-Control-Allow-Origin: *
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
Date: Mon, 23 Oct 2023 10:30:45 GMT

3. Cabeceras de Caché (Cache Headers)

Controlan el almacenamiento temporal de recursos.

PRINCIPALES CABECERAS DE CACHÉ:

CabeceraValores ComunesSignificado
Cache-Controlno-cache, no-store, max-age=3600Control directo del caché
ETag"33a64df551425fcc55e4d"Identificador único de versión
Last-ModifiedMon, 23 Oct 2023 10:00:00 GMTFecha de última modificación
ExpiresTue, 24 Oct 2023 10:30:45 GMTFecha de expiración

EJEMPLOS DE ESTRATEGIAS DE CACHÉ:

# No almacenar en caché
Cache-Control: no-cache, no-store, must-revalidate

# Cachear por 1 hora
Cache-Control: public, max-age=3600

# Cachear pero validar con servidor
Cache-Control: no-cache
ETag: "33a64df551425fcc55e4d"
Last-Modified: Mon, 23 Oct 2023 10:00:00 GMT

4. Cabeceras de Autenticación y Seguridad

MECANISMOS DE AUTENTICACIÓN:

Basic Auth:

Authorization: Basic dXNlcjpwYXNzd29yZA==
# (user:password en Base64)

Bearer Token (JWT):

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Cookies de Sesión:

# En petición
Cookie: session_id=abc123; user_preferences=dark_mode

# En respuesta
Set-Cookie: session_id=xyz789; Path=/; Secure; HttpOnly; SameSite=Strict

5. Cabeceras CORS (Cross-Origin Resource Sharing)

Permiten el acceso entre diferentes dominios.

CABECERAS CORS PRINCIPALES:

CabeceraEjemploPropósito
Access-Control-Allow-Origin* o https://cliente.comDominios permitidos
Access-Control-Allow-MethodsGET, POST, PUT, DELETEMétodos HTTP permitidos
Access-Control-Allow-HeadersContent-Type, AuthorizationCabeceras permitidas
Access-Control-Allow-CredentialstruePermitir credenciales

EJEMPLO DE RESPUESTA CORS:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://mi-frontend.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 86400

Cabeceras Específicas por Contexto

Para Upload de Archivos:

Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Length: 1048576

Para APIs RESTful:

Accept: application/vnd.api+json
Content-Type: application/vnd.api+json
X-API-Version: 2.0

Para Streaming:

Transfer-Encoding: chunked
Content-Type: video/mp4
Content-Range: bytes 0-1023/2048

Procesamiento de Cabeceras en el Servidor

EJEMPLO EN NODE.JS:

app.get("/api/datos", (req, res) => {
// Leer cabeceras de petición
const userAgent = req.get("User-Agent");
const authToken = req.get("Authorization");
const acceptHeader = req.get("Accept");

// Validar autenticación
if (!authToken || !authToken.startsWith("Bearer ")) {
return res
.status(401)
.set("WWW-Authenticate", 'Bearer realm="API"')
.json({ error: "Token requerido" });
}

// Configurar cabeceras de respuesta
res.set({
"Content-Type": "application/json; charset=utf-8",
"Cache-Control": "no-cache",
"X-Custom-Header": "valor-personalizado",
});

res.json({ datos: "contenido" });
});

Cabeceras Personalizadas

CONVENCIÓN: Prefijar con X- para cabeceras personalizadas

EJEMPLOS:

# En petición
X-API-Key: abc123def456
X-Request-ID: 123e4567-e89b-12d3-a456-426614174000
X-Client-Version: 2.1.0

# En respuesta
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1698064245
X-Powered-By: Mi-API/1.0

Optimización y Mejores Prácticas

Compresión de Contenido:

# Cliente indica qué compresiones acepta
Accept-Encoding: gzip, deflate, br

# Servidor indica qué compresión usa
Content-Encoding: gzip

Negociación de Contenido:

# Cliente especifica preferencias
Accept: application/json, text/html;q=0.9, */*;q=0.8
Accept-Language: es-ES, es;q=0.9, en;q=0.7
Accept-Charset: utf-8, iso-8859-1;q=0.5

Seguridad:

# Cabeceras de seguridad recomendadas
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Content-Security-Policy: default-src 'self'

Resumen Técnico

  • Función: Proveer metadatos y configuración para la comunicación HTTP
  • Tipos: Petición, Respuesta, Caché, Autenticación, CORS
  • Formato: Nombre: valor (una por línea)
  • Importancia: Controlan caché, seguridad, formato de datos, autenticación
  • Extensibilidad: Se pueden crear cabeceras personalizadas con prefijo X-

Las cabeceras son esenciales para el funcionamiento avanzado de aplicaciones web modernas, permitiendo control fino sobre el comportamiento de la comunicación entre cliente y servidor.