Cadenas de User Agent: Leyendo Huellas de Navegador
Qué te dice esa cadena rara sobre tus visitantes y por qué a menudo es engañosa.
Cada solicitud HTTP incluye un encabezado User-Agent. Algo como:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Se supone que esto identifica el navegador. En la práctica, es un desastre histórico.
Por Qué Todos los Navegadores Mienten
Ese user agent de Chrome menciona Mozilla, AppleWebKit, KHTML y Safari. Chrome no es ninguno de esos.
Por qué: los sitios web solían verificar user agents y servir contenido diferente. Los nuevos navegadores se bloqueaban porque los sitios no los reconocían.
Así que los navegadores comenzaron a mentir. "Soy compatible con Mozilla" se volvió estándar. "Soy compatible con AppleWebKit" se agregó. Cada navegador afirma ser cada otro navegador.
Qué Puedes Realmente Aprender
A pesar del caos, los user agents todavía contienen información útil:
Nombre y versión del navegador: El navegador real usualmente está al final. "Chrome/120" o "Firefox/121".
Sistema operativo: "Windows NT 10.0" o "Mac OS X 10_15_7" o "Linux".
Tipo de dispositivo: Los user agents móviles incluyen nombres de dispositivo o "Mobile".
Identificación de bot: Googlebot, Bingbot y otros rastreadores se identifican.
Patrones Comunes de Detección
Chrome de escritorio:
...Chrome/120.0.0.0 Safari/537.36
Chrome móvil en Android:
...Android 10; Pixel 4...Chrome/120.0.0.0 Mobile Safari/537.36
Safari en iPhone:
...iPhone; CPU iPhone OS 17_0 like Mac OS X...Safari/605.1.15
Firefox:
...Firefox/121.0
Edge, Opera, Brave y otros están basados en Chrome y se ven similares a Chrome.
Por Qué la Detección de Características Es Mejor
La detección de user agent responde "¿qué navegador?" La detección de características responde "¿puede este navegador hacer X?"
// Detección de user agent (frágil)
if (navigator.userAgent.includes('Chrome')) {
// asumir características de Chrome
}
// Detección de características (robusto)
if ('serviceWorker' in navigator) {
// usar service workers
}
Los navegadores cambian. Las cadenas de user agent se modifican. La detección de características funciona sin importar qué.
Cuándo los User Agents Aún Importan
Analítica. Entender tu audiencia: cuota de mercado de navegador, móvil vs escritorio, distribución de SO.
Detección de bots. Identificar rastreadores y ajustar comportamiento del servidor.
Pruebas dirigidas. Reproducir problemas reportados por usuarios en navegadores específicos.
Decisiones de soporte legado. Si el 0.1% de usuarios ejecuta IE11, tal vez dejes de soportarlo.
Suplantación y Privacidad
Los user agents se falsifican fácilmente. Las extensiones de privacidad los modifican. Algunos navegadores permiten a los usuarios cambiarlos manualmente.
No confíes en los user agents para seguridad. Son pistas, no autenticación.
El fingerprinting de navegador combina user agent con otras señales (tamaño de pantalla, fuentes, plugins) para rastreo. Esto es controversial y cada vez más bloqueado por navegadores.
Client Hints: La Alternativa Moderna
User-Agent Client Hints son un enfoque más nuevo. Los servidores solicitan información específica:
Sec-CH-UA: "Chromium";v="120", "Google Chrome";v="120"
Sec-CH-UA-Platform: "Windows"
Sec-CH-UA-Mobile: ?0
Estructurado, confiable, respetuoso con la privacidad. Pero la adopción aún está creciendo.
Bibliotecas de Análisis
No analices user agents con regex. Los casos extremos te derrotarán.
Usa bibliotecas establecidas que mantienen bases de datos de patrones:
- ua-parser-js (JavaScript)
- user-agents (Python)
- DeviceDetector (PHP)
Estas manejan el desastre histórico y se actualizan cuando aparecen nuevos navegadores.
Los user agents son útiles para analítica y diagnósticos pero poco confiables para decisiones de características. Analízalos con bibliotecas, prefiere detección de características para funcionalidad, y recuerda que cualquier usuario puede falsificar su user agent.