Archivos HAR: Captura y Análisis del Tráfico HTTP
HAR (HTTP Archive) es un formato basado en JSON para registrar datos de solicitudes y respuestas HTTP. Cuando abres las Herramientas de Desarrollador del navegador, vas a la pestaña Red y exportas el tráfico capturado, el resultado es un archivo .har. Este único archivo contiene un registro completo de cada transacción HTTP — URLs, cabeceras, cookies, cuerpos de solicitud, cuerpos de respuesta, tiempos y códigos de estado — haciendo de HAR el formato universal para análisis de rendimiento web, depuración de APIs y auditoría de seguridad.
Estructura de un Archivo HAR
Un archivo HAR es un documento JSON con una jerarquía estricta:
{
"log": {
"version": "1.2",
"creator": {
"name": "Chrome DevTools",
"version": "120.0.6099.109"
},
"pages": [...],
"entries": [...]
}
}
El array entries es el corazón del archivo. Cada entrada representa una transacción HTTP:
{
"startedDateTime": "2024-01-15T10:23:45.123Z",
"time": 287.4,
"request": {
"method": "POST",
"url": "https://api.ejemplo.com/convertir",
"httpVersion": "HTTP/2",
"headers": [
{"name": "Content-Type", "value": "application/json"},
{"name": "Authorization", "value": "Bearer eyJhbGc..."}
],
"postData": {
"mimeType": "application/json",
"text": "{\"archivo_id\": \"abc123\", \"destino\": \"pdf\"}"
}
},
"response": {
"status": 202,
"statusText": "Accepted",
"content": {
"size": 248,
"mimeType": "application/json",
"text": "{\"trabajo_id\": \"job_xyz789\", \"estado\": \"pendiente\"}"
}
},
"timings": {
"blocked": 0.5,
"dns": 12.3,
"connect": 45.2,
"ssl": 31.1,
"send": 0.8,
"wait": 185.7,
"receive": 11.8
}
}
Desglose de Tiempos
El objeto timings desglosa el tiempo de respuesta en fases:
- blocked — tiempo esperando un hueco de conexión de red
- dns — tiempo de resolución DNS
- connect — establecimiento de conexión TCP
- ssl — tiempo de handshake TLS
- send — tiempo para enviar la solicitud
- wait — tiempo desde el envío de la solicitud hasta recibir el primer byte (TTFB — Time to First Byte)
- receive — tiempo para descargar el cuerpo de la respuesta
Tiempo total = blocked + dns + connect + ssl + send + wait + receive.
Cómo Exportar un Archivo HAR
Chrome / Edge:
- Abre las Herramientas de Desarrollador (F12 o Ctrl+Shift+I)
- Ve a la pestaña Red
- Reproduce el problema o la carga de página
- Clic derecho sobre cualquier solicitud → "Guardar todo como HAR con contenido"
Firefox:
- Herramientas de Desarrollador → pestaña Red
- Clic derecho → "Guardar todo como HAR"
Safari:
- Menú Desarrollo → Mostrar Inspector Web → pestaña Red
- Icono de exportar → Exportar HAR
Captura programática:
- Playwright y Puppeteer: APIs de grabación integradas para captura de HAR
- mitmproxy:
mitmdump -w salida.harcaptura tráfico a nivel de proxy - Charles Proxy: Archivo → Exportar sesión → HAR
Casos de Uso de los Archivos HAR
Análisis de Rendimiento Web
Los archivos HAR son el formato de entrada para herramientas como:
- WebPageTest — acepta HAR para generar gráficos de cascada y análisis
- HAR Analyzer (Google) — identifica solicitudes lentas, payloads grandes, cadenas de redirección
- GTmetrix — exportación HAR para análisis offline
El gráfico de cascada generado desde datos HAR muestra dependencias de solicitudes y carga paralela, facilitando identificar recursos que bloquean el renderizado, TTFB lento y cuellos de botella de descarga.
Depuración de APIs
Los archivos HAR capturan pares exactos de solicitud/respuesta incluyendo:
- Todas las cabeceras de solicitud (tokens de autenticación, cookies, cabeceras personalizadas)
- Cuerpos exactos de solicitud (JSON, datos de formulario, multipart)
- Cuerpos completos de respuesta
- Códigos de estado y datos de temporización
Son invaluables para depurar fallos intermitentes de API. Exporta un HAR durante el fallo, compártelo con el equipo de API y verán exactamente qué envió el cliente y qué devolvió el servidor.
Replay y Testing
Las herramientas pueden reproducir tráfico HAR:
- Playwright:
page.routeFromHAR('grabacion.har')hace que los tests usen respuestas grabadas en lugar de la API real - Postman: Importar HAR → crea automáticamente una colección Postman con todas las solicitudes capturadas
Auditoría de Seguridad
Las herramientas de seguridad usan archivos HAR para:
- Revisar todas las cabeceras enviadas (detectar tokens filtrados, cabeceras de seguridad faltantes)
- Identificar solicitudes HTTP (no HTTPS) en una carga de página
- Detectar problemas de contenido mixto
- Encontrar respuestas de error demasiado verbosas que filtran stack traces
Advertencia sobre Datos Sensibles
Los archivos HAR contienen todo lo que el navegador envió y recibió, incluyendo:
- Cabeceras Authorization con tokens bearer o claves API
- Cookies de sesión que permiten secuestro de sesión si son robadas
- Cuerpos de solicitud con contraseñas, PII o datos de pago
- Cuerpos de respuesta con datos de usuario o información interna del sistema
Nunca compartas archivos HAR crudos en rastreadores públicos de errores, issues de GitHub o tickets de soporte. Saneálos primero usando:
- HAR Sanitizer (paquete npm har-sanitizer)
- HAR Sanitizer de Google — herramienta web que elimina campos sensibles
- Inspección manual con un editor de texto (HAR es solo JSON)
Procesamiento Programático de Archivos HAR
Como HAR es JSON puro, cualquier lenguaje puede parsearlo:
import json
with open('trafico.har', 'r') as f:
har = json.load(f)
entradas = har['log']['entries']
# Encontrar solicitudes lentas (>500ms)
lentas = [e for e in entradas if e['time'] > 500]
# Encontrar solicitudes fallidas
fallidas = [e for e in entradas if e['response']['status'] >= 400]
# Calcular bytes totales transferidos
total_bytes = sum(e['response']['bodySize'] for e in entradas if e['response']['bodySize'] > 0)
print(f"Solicitudes lentas: {len(lentas)}")
print(f"Solicitudes fallidas: {len(fallidas)}")
print(f"Total descargado: {total_bytes / 1024 / 1024:.1f} MB")
Consideraciones sobre el Tamaño del Archivo HAR
Los archivos HAR pueden ser muy grandes porque capturan cuerpos de respuesta completos. Una sola carga de página de una aplicación web moderna puede producir un archivo HAR de 5–50 MB. Los cuerpos de respuesta para imágenes, fuentes y scripts se codifican en base64 inline en el JSON.
Para reducir el tamaño:
- Filtra a solicitudes específicas antes de exportar (filtra por dominio en la pestaña Red)
- Usa un proxy que solo capture cabeceras, no cuerpos, para análisis de rendimiento
- Elimina tipos de contenido binario (imágenes, fuentes, vídeos) usando el sanitizador HAR
La combinación de legibilidad humana, soporte universal en navegadores y datos de tiempo detallados hace que HAR sea el formato ideal para diagnosticar problemas de rendimiento web, depurar integraciones de API y auditar tráfico HTTP.
Conversiones relacionadas
Conversiones de archivos comprimidos más usadas: