Skip to content

Glossary

User-Agent

El encabezado HTTP que miente sobre sí mismo

By Published Updated

Se supone que el encabezado User-Agent identifica al cliente que realiza una solicitud HTTP — nombre del navegador, versión, sistema operativo, etc. También es el encabezado más sobrecargado de la historia de HTTP, mintiendo sobre su propio contenido por razones de compatibilidad con versiones anteriores que se acumulan año tras año.

Una cadena User-Agent típica de Chrome moderno:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36

Chrome dice ser Mozilla, Apple WebKit y Safari, todo al mismo tiempo. Ninguno de esos tokens es preciso — existen porque algún código del lado del servidor de 1998 verificaba “Mozilla” antes de servir HTML moderno, por lo que todos los navegadores posteriores añadieron “Mozilla/5.0” para evitar ser degradados. La cadena ha sido un museo de hacks de compatibilidad desde entonces.

Alternativas modernas:

  • User-Agent Client Hints (familia de encabezados Sec-CH-UA) — Chrome comenzó a enviar indicios de cliente estructurados en 2020. Los servidores pueden suscribirse mediante Accept-CH. Datos más limpios, menor huella predeterminada.
  • Detección de características en lugar de detección de UA — compruebe si la API que necesita existe en lugar de adivinar a partir de la versión del navegador.

Las cadenas User-Agent pueden falsificarse trivialmente; trátelas como una pista, no como un límite de seguridad. Para análisis, el UA proporciona un desglose aproximado de la cuota de clientes; para decisiones reales, detecte características.

El proyecto de reducción del User-Agent de Chrome: Google comenzó a reducir la entropía de la cadena UA en 2022, congelando la versión menor, eliminando la versión precisa del sistema operativo y unificando las cadenas de móvil y escritorio. El objetivo era reducir la toma de huellas digitales pasiva — una cadena UA puede identificar un navegador único entre cientos de miles de otros puramente por sus tokens de versión de compilación. Para 2025 la cadena UA de Chrome es significativamente más corta y menos identificativa. Firefox y Safari han seguido a ritmos más lentos. Los sitios que aún dependen de analizar el UA para la detección del navegador se están rompiendo lentamente — la API moderna de Client Hints (Sec-CH-UA, Sec-CH-UA-Platform, etc.) es el reemplazo compatible.

User-agents de bots — convención, no aplicación: Googlebot, Bingbot, GPTBot, ClaudeBot y la mayoría de los rastreadores comerciales se identifican honestamente en la cadena UA porque necesitan ser autorizados más allá de robots.txt y tener límites de velocidad justos. Los scrapers que no se identifican a menudo falsifican un UA de navegador — que es la razón por la que la limitación de velocidad y la detección de bots no pueden depender únicamente de cadenas UA. La gestión moderna de bots combina UA con toma de huellas digitales TLS (JA3/JA4), configuraciones HTTP/2, señales de ratón/teclado y marcadores de navegador sin cabeza. Un sitio que elige permitir solo bots listados debe coincidir en múltiples señales, no solo el UA. Referencia: RFC 9110 §10.1.5 — User-Agent.

Ejemplo práctico

Quiere detectar “el usuario está en iOS Safari” para una comprobación de compatibilidad de Web Push. Detección UA ingenua: /iPhone|iPad|iPod/.test(ua) && /Safari/.test(ua) && !/CriOS|FxiOS/.test(ua). Excepto: iPadOS 13+ envía el UA “escritorio” por defecto, por lo que iPad no está en la cadena. Excepto: Chrome en iOS contiene “CriOS” pero es realmente WebKit por debajo (política de plataforma de Apple), por lo que la negación es incorrecta. Excepto: un usuario con extensión de privacidad puede falsificar su UA a Firefox-en-Linux. Detecte características en su lugar: 'serviceWorker' in navigator && 'PushManager' in window && Notification.permission !== 'denied' — tres verificaciones de línea, funciona en todos los navegadores, no se rompe cuando Apple lanza iOS 18 el año que viene. La versión con detección UA ya estaba rota para ~6% de los usuarios cuando se lanzó.

Cuándo y por qué importa

La lógica basada en UA es la mayor fuente única de bugs “funciona en Chrome, roto en Safari” que no son realmente bugs del motor del navegador. En el lado del servidor, trate el UA solo como una señal de análisis aproximada — nunca bloquee características, contenido o comprobaciones de seguridad en él. En el lado del cliente, prefiera la detección de características (Modernizr o comprobaciones manuales para la API específica que necesita). Para la mitigación de bots, combine UA con toma de huellas digitales TLS (akamai-bot-manager, modo de lucha contra bots de Cloudflare), señales de comportamiento (entropía de movimiento del ratón) y desafíos de prueba de trabajo (hCaptcha, Turnstile). La historia de Client Hints está mejorando — Sec-CH-UA-Platform es confiable, Sec-CH-UA-Mobile es confiable para la distinción móvil/escritorio, pero cualquier cosa más específica aún requiere la aceptación del usuario mediante Accept-CH. Referencia: W3C WICG — User-Agent Client Hints.

Frequently asked questions

¿Qué es el encabezado HTTP User-Agent?
El encabezado User-Agent es enviado por los navegadores y clientes HTTP con cada solicitud para identificar el software que realiza la solicitud — normalmente incluyendo nombre del navegador, versión, motor y sistema operativo. Los servidores lo usan para personalizar respuestas o análisis.
¿Por qué la cadena User-Agent es notoriamente poco confiable?
Por compatibilidad con versiones anteriores, los navegadores históricamente se declaraban como otros navegadores (Chrome dice ser Mozilla/5.0; Safari; Chrome). Esto se fue acumulando durante décadas a medida que los sitios servían contenido solo a cadenas reconocidas. Las cadenas User-Agent modernas contienen tokens para múltiples navegadores que no son, haciendo que analizarlas para detectar características sea poco confiable.
¿Cuál es la diferencia entre User-Agent y Client Hints?
User-Agent es una sola cadena de encabezado enviada automáticamente con cada solicitud, conteniendo todo a la vez. Client Hints (Sec-CH-UA-*) es una API más reciente que permite a los servidores solicitar solo los atributos de dispositivo específicos que necesitan, reduciendo la superficie de toma de huellas digitales y dando a los navegadores más control de privacidad.

Related

Published May 15, 2026 · Last reviewed May 31, 2026