El User-Agent es un campo del header HTTP que acompaña cada request al servidor. Su función original: permitir que el servidor adapte la respuesta según las capacidades del cliente. Por ejemplo, enviar HTML5 a Chrome moderno pero una versión simplificada a Internet Explorer 6.
Un User-Agent típico luce así: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36. Ese string codifica el sistema operativo (Windows 10 64-bit), el motor de renderizado (AppleWebKit) y el navegador (Chrome 120).
El problema: ese mismo header se convirtió en herramienta de fingerprinting, permitiendo rastrear usuarios sin cookies. Sitios analíticos y plataformas publicitarias lo combinan con otros datos (resolución de pantalla, zona horaria, plugins instalados) para crear un perfil único.
Cuando tu navegador hace un request HTTP, incluye automáticamente el header User-Agent. El servidor lo lee y puede:
- Servir contenido optimizado: responsive design del lado del servidor, polyfills solo para navegadores viejos.
- Bloquear bots: rechazar requests con User-Agents de scrapers conocidos (aunque los bots sofisticados los falsifican).
- Recopilar estadísticas: Google Analytics usa el User-Agent para reportar qué navegadores visitan tu sitio.
- Aplicar reglas de negocio: bancos y fintechs bloquean navegadores desactualizados por seguridad.
El formato no está estandarizado estrictamente. Por razones históricas (la "guerra de los navegadores"), todos mienten un poco: Chrome dice ser Safari, Safari dice ser Mozilla, Edge dice ser Chrome. Esto ocurrió porque sitios bloqueaban navegadores que no reconocían, forzando a los nuevos a mentir para ser compatibles.
Hoy existen bibliotecas como ua-parser-js (JavaScript) o user_agents (Python) que parsean estos strings y extraen datos estructurados: familia de navegador, versión, OS, si es móvil o desktop.
Usar para:
- Feature detection suplementaria: si ya hiciste detección del lado del cliente y necesitás confirmar en el servidor.
- Logs y analytics: entender qué navegadores usan tus usuarios ayuda a priorizar testing.
- Rate limiting inteligente: aplicar límites más estrictos a bots identificados.
No usar para:
- Decisiones críticas de renderizado: preferí feature detection con JavaScript (
'fetch' in window) en lugar de inferir capacidades por User-Agent. - Seguridad: nunca confíes en el User-Agent para autenticación o autorización. Es trivial falsificarlo.
- Bloquear usuarios legítimos: muchos usuarios de privacidad usan extensiones que aleatorizan o modifican el User-Agent.
La tendencia moderna (User-Agent Client Hints, parte del estándar HTTP/2) busca reemplazar el User-Agent monolítico por headers granulares que el servidor solicita explícitamente, mejorando privacidad.
Desde 2021, Chrome, Edge y otros navegadores Chromium congelaron progresivamente el User-Agent para reducir fingerprinting. Ahora todos reportan versiones genéricas: Chrome/110.0.0.0 en lugar de la versión exacta.
Safari fue más lejos: desde iOS 13, todos los iPhones reportan el mismo User-Agent sin importar el modelo. Firefox está evaluando medidas similares.
Si tu app necesita información detallada del cliente, la recomendación es migrar a User-Agent Client Hints: headers como Sec-CH-UA-Platform, Sec-CH-UA-Mobile que el servidor solicita explícitamente mediante el header Accept-CH. Esto da control al usuario: los navegadores pueden negar esos hints en modo incógnito o con configuraciones de privacidad estrictas.
Ejemplos
Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36curl/7.68.0Googlebot/2.1 (+http://www.google.com/bot.html)Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/121.0
Preguntas frecuentes
¿Puedo falsificar mi User-Agent?
Sí. Extensiones como User-Agent Switcher o herramientas como curl permiten enviar cualquier User-Agent. Los servidores no pueden verificar su autenticidad, por eso nunca debe usarse para seguridad.
¿Por qué todos los User-Agents dicen Mozilla?
Por compatibilidad histórica. En los 90, sitios rechazaban navegadores que no fueran Netscape (Mozilla). Cuando aparecieron IE, Opera y Chrome, todos mintieron diciendo ser Mozilla para evitar bloqueos. La práctica persiste por legacy.
¿Qué son los User-Agent Client Hints?
Un estándar moderno que reemplaza el User-Agent monolítico por headers granulares que el servidor solicita explícitamente. Mejora privacidad al dar control al usuario sobre qué información comparte y reduce la superficie de fingerprinting.