Esta página se tradujo automáticamente. Lee la versión original en inglés aquí.

Hoja de referencia de Passkeys. Guías prácticas, patrones de despliegue y KPIs para programas de passkeys.
navigator.userAgentData, lo que obliga a los desarrolladores a recurrir al análisis clásico de la cadena de User-Agent en el navegador de Mozilla.getHighEntropyValues() accede a datos de dispositivos de alta entropía únicamente en navegadores Chromium. Safari y Firefox carecen por completo de esta API.Los métodos para detectar y responder a los diferentes entornos de los usuarios cambian constantemente. Tradicionalmente, las cadenas de User-Agent han sido la forma de identificar información del navegador y del dispositivo, lo que permitía a los sitios web adaptar las experiencias en consecuencia. Sin embargo, estas cadenas se han utilizado a menudo para la creación de huellas dactilares y la identificación de los usuarios sin su consentimiento por razones de marketing, lo que ha suscitado preocupaciones sobre la privacidad.
En este contexto, los Client Hints como APIs de JavaScript han surgido como una herramienta, proporcionando una forma más controlada y respetuosa con la privacidad de compartir información necesaria sobre el dispositivo y las preferencias del usuario. Este artículo se centra en las consecuencias de la reducción del User-Agent y explora cómo los Client Hints ayudan a adaptarse a esta nueva situación.
Puntos clave que abordaremos:
Como los navegadores y los sistemas operativos tienen posturas diferentes y adaptan sus enfoques de manera distinta, los desarrolladores de software se enfrentan al reto de garantizar que sus aplicaciones puedan seguir detectando y respondiendo a los diversos entornos de usuario de forma precisa en todos los navegadores y sistemas operativos.
Este artículo tiene como objetivo proporcionar una visión general completa de estos cambios, ofreciendo información y orientación práctica para ayudar a los desarrolladores en caso de que su caso de uso o software dependa de detalles del dispositivo o del sistema operativo (por ejemplo, gestión detallada de dispositivos, detección de dispositivos conocidos, prevención de fraudes u otras detecciones de características) o, como en nuestro propio caso, optimizar la experiencia de las claves de acceso con el User-Agent y los Client Hints.
Artículos recientes
📖
Claves de acceso en Parallels: Prueba de autenticación cruzada en una máquina virtual de Windows 11 en Mac
⚙️
9 bibliotecas de implementación de servidor WebAuthn comparadas
⚙️
Client Hints y User-Agents en Chrome, Safari y Firefox
⚙️
Hoja de trucos de claves de acceso para desarrolladores
👤
Cómo eliminar una clave de acceso en Apple, Windows y Android
Antes de profundizar en los detalles técnicos sobre los Client Hints, exploraremos brevemente la historia del User-Agent y cómo funcionan los diferentes esfuerzos de reducción del User-Agent.
La historia de las cadenas de User-Agent se remonta a los inicios de los primeros navegadores web. Tim Berners-Lee desarrolló el primer navegador web, WorldWideWeb (más tarde rebautizado como Nexus) en 1990. Pronto le siguieron otros navegadores pioneros como Line Mode Browser en 1991 y, posteriormente, surgieron navegadores como MidasWWW, ViolaWWW, Erwise y Cello.
En 1993, se atribuye al lanzamiento de NCSA Mosaic, a menudo denominado simplemente Mosaic, el mérito de haber encendido el aumento inicial de la popularidad de la web. La cadena del User-Agent de Mosaic era bastante sencilla, normalmente formateada como NCSA_Mosaic/1.0 y presentaba el nombre del producto seguido de una barra diagonal opcional y el número de versión.
Inicialmente, el campo User-Agent se introdujo con fines analíticos y para ayudar a identificar problemas. Se recomendó explícitamente que este campo "debería incluirse" en las solicitudes HTTP, como se señala en el archivo HTTP del W3C de 1992. Este campo sencillo proporcionó una forma simple pero eficaz de transmitir el nombre y la versión del producto, lo que ayudó a comprender y solucionar problemas relacionados con el navegador.
A medida que la web evolucionó, también lo hicieron la complejidad y el uso de las cadenas de User-Agent. Se volvieron más detalladas y comenzaron a incluir una gran cantidad de información sobre el navegador, el sistema operativo y el dispositivo. Si bien esta información era valiosa para el análisis web y la optimización de las experiencias de los usuarios, también planteaba importantes preocupaciones sobre la privacidad. Las cadenas detalladas de User-Agent permitían la creación de huellas dactilares de los dispositivos, lo que permitía a los anunciantes y rastreadores crear perfiles únicos de los usuarios y rastrear sus actividades en línea a través de diferentes sitios web.
En la era moderna, donde la privacidad se ha convertido en una preocupación importante tanto para los usuarios como para los reguladores, la naturaleza detallada de las cadenas de User-Agent se ha considerado cada vez más como problemática. Esta constatación ha dado lugar a esfuerzos por reducir la granularidad de las cadenas de User-Agent, con el objetivo de lograr un equilibrio entre proporcionar la información necesaria para el funcionamiento de la web y proteger la privacidad del usuario. Esta transición marca el comienzo de la reducción de User-Agent, un movimiento hacia la minimización de la información compartida en las cadenas de User-Agent para mitigar los riesgos de privacidad y mejorar la seguridad.
El movimiento hacia la reducción de User-Agent comenzó como respuesta a las crecientes preocupaciones sobre la privacidad. A continuación, se presenta una descripción cronológica de los principales hitos de esta evolución:
En 2017, Apple inició el movimiento de reducción del User-Agent con una famosa publicación en Twitter anunciando que Safari congelaría la cadena del User-Agent en Safari Technology Preview 46 (STP 46), con el objetivo de combatir las huellas dactilares y mejorar la privacidad.
Sin embargo, esta decisión se revirtió parcialmente más tarde en 2021 debido a importantes problemas de compatibilidad con sitios web que dependían de información actualizada del User-Agent.
En 2019/2020, Google anunció planes para reducir la granularidad de las cadenas de User-Agent en Chrome, introduciendo los User-Agent Client Hints (UA-CH) como una forma flexible y controlada de solicitar información específica sobre el navegador y el dispositivo. Google comenzó a probar la reducción de User-Agent en las versiones Canary y Beta de Chrome, recopilando comentarios para garantizar la compatibilidad y funcionalidad y se completó en 2023 para Android y todas las demás plataformas de Chrome. Al mismo tiempo, Chrome introdujo los Client Hints como una nueva forma de acceder a esa información. Como Microsoft Edge se basa en Chromium, se comporta como Chrome en todas las plataformas.
En 2021, Mozilla se unió al esfuerzo, reduciendo gradualmente la granularidad de la cadena del User-Agent, pero decidió no admitir los Client Hints en Firefox.
La reducción de User-Agent varía según el navegador: Chromium (Chrome, Edge) ha implementado una reducción completa del UA con soporte para Client Hints. Sin embargo, Safari utiliza su propio enfoque de UA congelado sin adoptar UA-CH, y Firefox no ha implementado navigator.userAgentData. El ecosistema sigue fragmentado.
Los Client Hints han evolucionado dentro de Chromium: todos los navegadores siguen enviando un encabezado de User-Agent, pero en la mayoría de ellos está congelado en una versión más antigua (véase la tabla siguiente). Para Chromium, se pueden utilizar Client Hints para obtener más información.
Veamos lo que envían actualmente los navegadores como User-Agents en el siguiente capítulo.
Suscríbete a nuestro Substack de passkeys para recibir las últimas noticias.
Cuando se habla de reducción de User-Agent, se hace referencia a reducir la información dentro de la cadena del User-Agent. Profundicemos para averiguar qué se incluía en el User-Agent antes de la reducción.
Una cadena de User-Agent clásica solía incluir los siguientes componentes, que podían utilizarse para detectar la funcionalidad:
Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.2.1.0 Mobile Safari/537.36
Históricamente, las cadenas de User-Agent se utilizaban a menudo para la detección de características y plataformas, lo que permitía a los sitios web adaptar su contenido y funcionalidad en función de las características detectadas del navegador y del dispositivo (por ejemplo, determinar qué descarga de un binario específico ofrecer). Esto cobró especial importancia con el auge de los teléfonos móviles y las tabletas para diseños que no se construyeron de forma adaptativa para poder redirigir los teléfonos móviles a su versión específica.
Sin embargo, este enfoque se considera ahora subóptimo, ya que se basa en suposiciones sobre las capacidades del navegador que pueden no ser ciertas o no ser lo suficientemente específicas. Las prácticas de desarrollo web modernas abogan por utilizar la detección de características a través de las APIs del navegador siempre que sea posible para comprobar directamente las características y capacidades específicas del navegador. Este método es más fiable y garantiza que los sitios web funcionen correctamente, independientemente de la cadena de User-Agent o de la versión del navegador. La detección de características se centra en las capacidades reales del navegador, lo que proporciona una forma más sólida y preparada para el futuro de manejar las diferencias en el comportamiento y la funcionalidad de los navegadores.
Hasta la fecha, esto no es totalmente posible, ya que las nuevas APIs del navegador para detectar la funcionalidad se implementan en diferentes momentos y, a menudo, hay un enfoque diferente entre los equipos de navegadores más grandes (por ejemplo, los navegadores basados en Chromium) y los más pequeños (por ejemplo, Firefox).
Más información brinda a un sitio web una mayor posibilidad de crear una huella dactilar con más "entropía". La entropía en este contexto es la cantidad de variación que se puede utilizar para generar una huella dactilar única entre los diferentes visitantes de un sitio web.
Una huella dactilar se puede utilizar para diferentes propósitos. Puede utilizarse con fines de protección, como detectar fraudes y detener apropiaciones de cuentas mediante la identificación de nuevos dispositivos, pero también puede utilizarse para identificar a los visitantes sin su consentimiento o para una segmentación de anuncios más específica.
En el contexto de las cadenas de User-Agent, la entropía se refiere a la cantidad de información única e identificable que se puede utilizar para rastrear y distinguir a usuarios individuales.
Hay mucha más información que se puede utilizar como fuente de entropía además del User-Agent. Por ejemplo, puede encontrar diferentes fuentes de entropía en https://coveryourtracks.eff.org.
Por lo tanto, cuando los navegadores hablan de reducción de User-Agent, su objetivo principal es reducir la información de alta entropía. Estos son diferentes ejemplos de la reducción:
A continuación, encontrará un ejemplo de la reducción del User-Agent de Google Chrome en un teléfono Android:
Antes:
Mozilla/5.0 (Linux; Android <span style={{color: '#016F01' }}>13; Pixel 7</span>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36
Después:
Mozilla/5.0 (Linux; Android <span style={{color: '#016F01' }}>10; K</span>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36
El formato del User-Agent se mantuvo inalterado para no interferir con la lógica de análisis existente de las bibliotecas. Se redujeron los siguientes valores:
El gráfico detalla qué valores se seguirán actualizando en función del sistema operativo y los valores en verde muestran qué valores serán constantes en todas las plataformas. Para los diferentes valores del sistema operativo, solo habrá disponible una variante que permanecerá constante:
| Sistema operativo | Nombre reducido/fijo |
|---|---|
| Mac | Macintosh; Intel Mac OS X 10_15_7 |
| Windows | Windows NT 10.0; Win64; x64 |
| ChromeOS | X11; CrOS x86_64 14541.0.0 |
| Linux | X11; Linux x86_64 |
| Android | Linux; Android 10; K |
| iOS | reducido (iOS 26+) |
A continuación, encontrará un ejemplo de la reducción del User-Agent de Mozilla Firefox, que sigue la mayor parte de las posiciones de Google sobre la reducción de User-Agent.
Este es un ejemplo de un User-Agent en Windows 11 con una versión actual de Firefox:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0
En este User-Agent, se han congelado la arquitectura de la CPU, la versión del sistema operativo y la versión secundaria del navegador.
A continuación, encontrará un ejemplo de una reducción del User-Agent de Safari en macOS.
En primer lugar, comencemos con un User-Agent de Safari en una versión 14.5 de macOS Sonoma en Mac Silicon M2.
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15
Se puede ver que la versión de macOS tiene un límite de 10_15_07 y la arquitectura también está fijada en Intel, por lo que no informa sobre la arquitectura de la CPU del Mac. Esto también se aplica a Firefox y Chrome en macOS.
Antes de iOS 26 (lanzado en septiembre de 2025), Safari en iOS exponía la versión real del sistema operativo. Sin embargo, Apple ahora ha congelado el User-Agent de iOS/iPadOS en Safari 26, al igual que en macOS. El siguiente ejemplo muestra un User-Agent anterior a iOS 26:
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1
Nota: a partir de iOS 26, todos los navegadores en iOS (Chrome, Firefox, Safari) tienen ahora cadenas de User-Agent congeladas, al igual que en macOS. Los siguientes ejemplos muestran el comportamiento anterior a iOS 26:
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/126.0.6478.153 Mobile/15E148 Safari/604.1
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/127.1 Mobile/15E148 Safari/605.1.15
En general, es obvio que el User-Agent se reduce específicamente en la información de alta entropía. El siguiente resumen muestra en qué combinaciones de plataforma / sistema operativo se reduce el User-Agent.
| Navegador | Windows | MacOS | iOS | Android |
|---|---|---|---|---|
| Chrome | reducido | reducido | reducido (iOS 26+) | reducido |
| Edge | reducido | reducido | reducido (iOS 26+) | reducido |
| Firefox | reducido | reducido | reducido (iOS 26+) | reducido |
| Safari | - | reducido* | reducido (Safari 26+)** | - |
| Samsung Internet | - | - | - | reducido |
| WebViews | - | - | reducido (iOS 26+) | no reducido (≥ 16: reducido) |
Por lo tanto, los problemas de detección más importantes con un User-Agent reducido son (* = consulte las notas a continuación para la versión de macOS):
A continuación, se muestra una tabla que asigna las versiones de macOS a sus correspondientes versiones de Safari:
| Versión de macOS | Versión de Safari | Año de lanzamiento |
|---|---|---|
| macOS Sequoia (15) | Safari 18 | 2024 |
| macOS Sonoma (14) | Safari 17 | 2023 |
| macOS Ventura (13) | Safari 16 | 2022 |
| macOS Monterey (12) | Safari 15 | 2021 |
| macOS Big Sur (11) | Safari 14 | 2020 |
| macOS Catalina (10.15) | Safari 13 | 2019 |
Existen otras formas de detectar los sistemas operativos y los navegadores mediante técnicas elaboradas de huellas dactilares, como las huellas dactilares de TLS. Dado que existen situaciones legítimas en las que tendría sentido una detección más profunda del sistema operativo, Google introdujo los Client Hints para poder recibir esta información mediante programación. Veremos cómo funcionan los Client Hints en el siguiente capítulo.
Los Client Hints permiten a los sitios web acceder a información de alta entropía que se eliminó de la cadena del User-Agent de una manera respetuosa con la privacidad. Hay dos métodos principales para acceder a los Client Hints:
Los Client Hints también pueden utilizarse para recuperar la información de baja entropía que ya está incluida en el User-Agent. Esto implica que en Chrome, donde se admiten los Client Hints, los user-agents ya no son necesarios.
Dependiendo del método de acceso que se utilice, la denominación de los Client Hints difiere ligeramente. Hemos enumerado el nombre más importante de los Client Hints:
| Token HTTP UA-CH | API JS UA-CH | Entropía |
|---|---|---|
| Sec-CH-UA-Platform-Version | UADataValues.platformVersion | Alta |
| Sec-CH-UA-Mobile | NavigatorUAData.mobile | Baja |
| Sec-CH-UA-Model | UADataValues.model | Alta |
| Sec-CH-UA | NavigatorUAData.brands | Baja |
| Sec-CH-UA-Arch | UADataValues.architecture | Alta |
En un contexto de origen, los sitios web pueden solicitar información específica sobre el navegador y el dispositivo del usuario utilizando encabezados de solicitud HTTP. Este enfoque implica establecer el encabezado correcto en la respuesta HTTP del servidor, indicando en qué Client Hints está interesado el servidor. A continuación, el navegador incluye estos hints en las solicitudes posteriores al mismo origen.
Este encabezado indica al navegador que envíe información detallada del usuario en futuras solicitudes, lo que permite al servidor adaptar las respuestas en consecuencia. Este método garantiza que a la información detallada del usuario solo se acceda desde el sitio web de origen, evitando que los recursos de terceros obtengan datos de alta entropía. Existen dos tipos de encabezados de solicitud disponibles, que analizaremos a continuación:
Los Client Hints normales son encabezados que un servidor puede solicitar al navegador para recopilar información sobre el entorno del usuario en las solicitudes posteriores.
Ejemplo: Chrome en macOS 14.5 con Client Hints normales en corbado.com
| Encabezado | Valor |
|---|---|
| Sec-Ch-Ua | "Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24" |
| Sec-Ch-Ua-Mobile | ?0 |
| Sec-Ch-Ua-Platform | "macOS" |
| Encabezado | Valor |
|---|---|
| Accept-CH | Sec-CH-UA-Platform-Version |
| Encabezado | Valor |
|---|---|
| Sec-Ch-Ua | "Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24" |
| Sec-Ch-Ua-Mobile | ?0 |
| Sec-Ch-Ua-Platform | "macOS" |
| Sec-Ch-Ua-Platform | "14.5.0" |
Al mismo tiempo, el User-Agent para esta solicitud seguirá siendo el mismo (sin la versión de la plataforma):
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
Utilizando https://user-agent-client-hints.glitch.me/headers, puede probar cómo se verían los diferentes diseños de información para hints normales (tenga en cuenta que debe utilizar Chrome). Consulte aquí para obtener más detalles. En caso de que corbado.com necesite esta información en la primera solicitud de página, esto utilizando los Client Hints normales no sería suficiente, pero hay una manera de acelerar este proceso con (client) hints críticos.
Supongamos que corbado.com necesita la versión de la plataforma en la primera solicitud para renderizar una página de descarga adecuada y adaptada a la versión exacta de macOS. Podría utilizar los (client) hints críticos, lo que daría lugar a un reintento inmediato de la solicitud para renderizar únicamente la página que incluya el encabezado:
Ejemplo: Chrome en macOS 14.5 con Client Hints críticos en corbado.com
| Encabezado | Valor |
|---|---|
| Sec-CH-UA | "Google Chrome";v="125", "Chromium";v="125", "Not_A/Brand";v="24" |
| Sec-CH-UA-Mobile | ?0 |
| Sec-CH-UA-Platform | "macOS" |
| Encabezado | Valor |
|---|---|
| Accept-CH | Sec-CH-UA-Platform-Version |
| Encabezado | Valor |
|---|---|
| Sec-CH-UA | "Google Chrome";v="125", "Chromium";v="125", "Not_A/Brand";v="24" |
| Sec-CH-UA-Mobile | ?0 |
| Sec-CH-UA-Platform | "macOS" |
| Sec-CH-UA-Platform-Version | "14.5.0" |
En los siguientes gráficos, vemos otro ejemplo en el que el sitio web solicita el modelo del dispositivo como elemento crítico con el encabezado Critical-CH. Como podemos ver, el cliente vuelve a intentar la solicitud como en el ejemplo anterior (gráfico de secuencia izquierdo).
Client hints con Chromium: https://developers.google.com/privacy-sandbox/protections/User-Agent
Por lo tanto, el uso de Client Hints críticos añade latencia porque el navegador debe iniciar una segunda solicitud de inmediato, lo que añade viajes de ida y vuelta. Hay una forma de optimizar la transferencia facilitando el handshake TLS (el cuadro verde de la parte superior del gráfico) para transmitir ya los detalles. Este enfoque que facilita ALPN (Application-Layer Protocol Negotiation) se puede encontrar aquí en detalle, pero va más allá del propósito de este artículo.
Para recibir información adicional utilizando encabezados, es necesario añadir la configuración al backend o a los servidores web / equilibradores de carga. Esto se hace fácilmente en un contexto de origen, cuando se tiene un control total sobre el sitio web como empresa. Por ejemplo, nuestros componentes de interfaz de usuario en corbado.com requieren la versión de la plataforma para aumentar la precisión de nuestra inteligencia de claves de acceso. Los desarrolladores integran nuestros componentes en varias páginas y exigirles que añadan encabezados y luego pasen esa información a nuestros componentes supondría un gasto adicional desagradable. Para las SPA y otras aplicaciones de JavaScript incrustadas, hay otra interfaz que se puede utilizar, que se explicará en la siguiente sección.
Utilizando la función navigator.userAgentData.getHighEntropyValues(), también se puede acceder a los Client Hints a través de una API de JavaScript, lo que proporciona una forma flexible y dinámica de solicitar información específica sobre el navegador y el dispositivo del usuario. Este método implica el uso del objeto navigator.userAgentData dentro del script de la página web para consultar los Client Hints. Este método no requiere que se establezcan los encabezados de los Client Hints, pero solo funciona en los navegadores que admiten navigator.userAgentData (naveadores basados en Chromium como Chrome y Edge). Firefox y Safari no admiten esta API, por lo que los desarrolladores deben detectar la funcionalidad y proporcionar alternativas.
Por ejemplo, al ejecutar este código en una consola de Chrome en macOS:
if (navigator.userAgentData) { navigator.userAgentData .getHighEntropyValues(["architecture", "model", "platformVersion"]) .then((ua) => { console.log(ua); }); }
Cuando se resuelve la promesa, se devuelve la información pertinente. Como ya hemos indicado, los nombres no son idénticos a los de los encabezados, pero se parecen mucho.
A continuación, se devuelve la platformVersion en la promesa y se puede acceder a ella directamente desde el código de JavaScript incrustado. La cobertura de esta función es muy inferior a la de la propia reducción del User-Agent:
Además, Chrome no ofrece esta funcionalidad en iOS porque implementa WebKit en iOS debido a las limitaciones de Apple.
Ahora hemos reunido los datos más importantes sobre la reducción de User-Agent y cómo los Client Hints ofrecen una forma de evitarla en Chrome.
Dependiendo de su caso de uso, debe utilizar un enfoque diferente para garantizar que su aplicación obtenga el mejor resultado posible:
En la tabla siguiente se resume dónde aún puede detectar la versión del sistema operativo si tiene acceso al User-Agent (UA) y a los Client Hints (CH):
| Navegador | Windows | MacOS | iOS | Android |
|---|---|---|---|---|
| Chrome | ✅ CH | ✅ CH | ❌ (iOS 26+) | ✅ CH |
| Edge | ✅ CH | ✅ CH | ❌ (iOS 26+) | ✅ CH |
| Firefox | ❌ | ❌ | ❌ (iOS 26+) | ❌ |
| Safari | - | ✅ UA-Safari | ❌ (Safari 26+) | - |
| Samsung Internet | - | - | - | ✅ CH |
| WebViews | - | - | ❌ (iOS 26+) | ✅ UA (≥ 16: ❌) |
Al elegir el método adecuado según sus necesidades específicas, puede equilibrar eficazmente la necesidad de información detallada de los usuarios con las consideraciones relativas a la privacidad y al rendimiento. Si depende en gran medida de información difícil de extraer o que esté realmente basada en el dispositivo, recurra a bibliotecas profesionales como wurfl o 51degrees.com para que hagan el trabajo duro por usted. Ambas bibliotecas admiten la integración de client links en la detección y también tienen su propia forma propietaria de detectar incluso los modelos de iPhone.
En Corbado, nos centramos en el desarrollo de soluciones en torno a las claves de acceso utilizando componentes de la interfaz de usuario desarrollados principalmente con React. Nuestros componentes están integrados en varios sitios web, por lo que seguimos nuestra propia recomendación y utilizamos getHighEntropyValues() siempre que esté disponible, recurriendo al análisis clásico del User-Agent en todos los demás casos. Lo utilizamos principalmente para:
Más detalles en: https://learn.microsoft.com/en-us/microsoft-edge/web-platform/how-to-detect-win11
Cuando empezamos a recopilar información para nuestros componentes, encontramos una gran cantidad de datos fragmentados creados durante o antes del inicio de la reducción del User-Agent. Por ello, pensamos que un resumen ayudaría a los desarrolladores que quieran mejorar la detección pero no trabajen con User-Agents o Client Hints de forma habitual.
Después de que la detección basada en User-Agents fuera el estándar durante décadas, las cadenas de User-Agent se han vuelto menos detalladas para proteger la privacidad del usuario. En este artículo hemos cubierto:
Los Client Hints siguen evolucionando y su adopción puede aumentar a medida que más navegadores y desarrolladores reconozcan sus ventajas. Sin embargo, queda por ver si su compatibilidad se generalizará o si la web seguirá divergiendo sobre este tema.
Corbado es la Authentication Intelligence Platform para equipos de CIAM que gestionan autenticación de consumidores a gran escala. Te ayudamos a ver lo que los logs de tu IDP y las herramientas de analytics genéricas no muestran: qué dispositivos, versiones de SO, navegadores y gestores de credenciales soportan passkeys, por qué los registros no se convierten en inicios de sesión, dónde falla el flujo de WebAuthn y cuándo una actualización de SO o navegador rompe el login en silencio — todo sin reemplazar Okta, Auth0, Ping, Cognito o tu IDP propio. Dos productos: Corbado Observe aporta observabilidad para passkeys y cualquier otro método de login. Corbado Connect añade passkeys gestionados con analytics integrado (junto a tu IDP). VicRoads ejecuta passkeys para más de 5M de usuarios con Corbado (+80 % de activación de passkey). Habla con un experto en Passkeys →
Apple congeló la cadena de User-Agent de iOS/iPadOS en Safari 26, lanzado en septiembre de 2025, lo que significa que la versión del SO ya no se expone a través del User-Agent en ningún navegador que se ejecute en iOS. A diferencia de Chrome en Android o escritorio, no hay ninguna API de Client Hints disponible en los navegadores de iOS, por lo que la versión real de iOS ya no es accesible mediante programación.
Los Client Hints normales, solicitados a través del encabezado de respuesta Accept-CH, se incluyen solo en las solicitudes posteriores y no están disponibles en la carga inicial de la página. Los Client Hints críticos provocan un reintento inmediato del navegador antes del renderizado, lo que garantiza que el hint esté disponible en el primer renderizado, pero esto añade un viaje de ida y vuelta de latencia al ciclo de solicitud.
Apple anunció la congelación del User-Agent en Safari Technology Preview 46 en 2017, pero revirtió parcialmente la decisión en 2021 debido a importantes problemas de compatibilidad con sitios web que dependían de información actualizada del User-Agent. Posteriormente, Apple implementó un enfoque de UA congelado más gradual en lugar de una congelación completa inmediata en ese momento.
Safari no admite Client Hints, pero la versión de macOS se puede deducir del número de versión de Safari en la cadena del User-Agent. Restar tres a la versión principal de Safari se asigna de forma fiable a la versión principal de macOS para macOS 10.15 y superior, basándose en la alineación constante de las versiones entre Safari y macOS.
El enfoque recomendado es llamar a navigator.userAgentData.getHighEntropyValues() cuando la función esté definida, cubriendo así los navegadores basados en Chromium, y recurrir a bibliotecas de análisis de cadenas de User-Agent para Firefox y Safari. Para los casos que requieran una identificación de modelos de dispositivos muy específica, las bibliotecas profesionales como wurfl o 51degrees proporcionan capacidades de detección adicionales más allá de lo que exponen las cadenas de User-Agent.
Artículos relacionados
Tabla de contenidos