📋 Encabezados HTTP
[... Previous sections remain the same as in the previous snippet ...]
Cookie
Envío de cookies almacenadas por el cliente
GET /api/perfil HTTP/1.1
Host: example.com
Cookie: sessionId=abc123; userId=456
// El navegador envía cookies automáticamente
fetch('https://example.com/api/perfil', {
credentials: 'include' // Incluir cookies
});
Referer
URL de la página anterior
GET /api/productos/123 HTTP/1.1
Host: example.com
Referer: https://example.com/productos
Propósito:
- Análisis de fuentes de tráfico
- Verificación de seguridad
- Registro
Otros encabezados de solicitud
Origin
├─ Origen desde donde se inició la solicitud
└─ Usado para verificación CORS
If-None-Match
├─ Comparar con valor ETag
└─ Validación de caché
If-Modified-Since
├─ Verificar si se modificó después de una fecha
└─ Validación de caché
Range
├─ Solicitar solo una parte de los datos
└─ Ejemplo: bytes=0-1023
📤 Encabezados de respuesta (Response Headers)
Content-Type
Tipo de medio del cuerpo de la respuesta
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"id": 123,
"name": "María González"
}
fetch('https://api.example.com/users/123')
.then(response => {
console.log(response.headers.get('Content-Type'));
// "application/json; charset=utf-8"
return response.json();
});
Content-Length
Tamaño del cuerpo de la respuesta (bytes)
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 256
{"id":123,"name":"María González"}
Set-Cookie
Almacenar cookies en el cliente
HTTP/1.1 200 OK
Set-Cookie: sessionId=abc123; Path=/; HttpOnly; Secure; SameSite=Strict
Set-Cookie: userId=456; Max-Age=3600
// Establecer cookie en servidor (Node.js/Express)
res.cookie('sessionId', 'abc123', {
httpOnly: true, // Bloquear acceso de JavaScript
secure: true, // Solo HTTPS
sameSite: 'strict',
maxAge: 3600000 // 1 hora
});
Atributos de cookies:
HttpOnly
├─ Sin acceso por JavaScript
└─ Defensa contra XSS
Secure
├─ Solo enviar por HTTPS
└─ Defensa contra ataques de intermediario
SameSite
├─ Strict: Solo en el mismo sitio
├─ Lax: Permitir algunos sitios cruzados
└─ None: Permitir todos los sitios cruzados (Secure obligatorio)
Max-Age / Expires
├─ Max-Age: 3600 (en segundos)
└─ Expires: Wed, 21 Oct 2025 07:28:00 GMT
Domain / Path
├─ Domain: example.com (incluye subdominios)
└─ Path: / (toda la ruta)
Cache-Control
Política de caché
HTTP/1.1 200 OK
Cache-Control: public, max-age=3600
ETag: "abc123"
Last-Modified: Wed, 26 Jan 2025 10:00:00 GMT
fetch('https://api.example.com/users')
.then(response => {
const cacheControl = response.headers.get('Cache-Control');
console.log(cacheControl); // "public, max-age=3600"
});
Directivas de caché:
Cache-Control: no-cache
├─ Validar con el servidor antes de usar caché
└─ Garantizar datos más recientes
Cache-Control: no-store
├─ No cachear
└─ Datos sensibles (contraseñas, etc.)
Cache-Control: public, max-age=3600
├─ Permitir caché pública
├─ Cachear durante 1 hora
└─ Recursos estáticos (imágenes, CSS, etc.)
Cache-Control: private, max-age=3600
├─ Cachear solo en navegador
└─ Datos específicos de usuario
Cache-Control: must-revalidate
├─ Validar obligatoriamente al expirar caché
└─ Prevenir datos antiguos
Location
Ubicación de redirección o recurso creado
HTTP/1.1 201 Created
Location: /api/users/123
HTTP/1.1 301 Movido Permanentemente
Location: https://example.com/nueva-pagina
fetch('https://api.example.com/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ name: 'María González' })
})
.then(response => {
if (response.status === 201) {
const location = response.headers.get('Location');
console.log('Nuevo recurso:', location); // "/api/users/123"
}
});
Access-Control-* (CORS)
Intercambio de recursos de origen cruzado
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Max-Age: 86400
// Configuración CORS en servidor (Node.js/Express)
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', 'https://example.com');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
next();
});
Encabezados CORS:
Access-Control-Allow-Origin
├─ Especificar origen permitido
├─ *: Permite todos los orígenes (cuidado con seguridad)
└─ https://example.com: Solo ese origen
Access-Control-Allow-Methods
├─ Métodos HTTP permitidos
└─ GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers
├─ Encabezados de solicitud permitidos
└─ Content-Type, Authorization
Access-Control-Allow-Credentials
├─ Permitir inclusión de cookies
└─ true (no válido con Origin *)
Access-Control-Max-Age
├─ Tiempo de caché de resultados Preflight (segundos)
└─ 86400 (24 horas)