Get your free and exclusive +45-page Authentication Analytics Whitepaper
Volver al resumen

Client Hints y User-Agents en Chrome, Safari y Firefox

Descubra cómo Chrome, Safari y Firefox soportan la API de Client Hints y User-Agent y cómo los utilizamos para claves de acceso y detección de dispositivos.

Vincent Delitz
Vincent Delitz

Creado: 2 de julio de 2024

Actualizado: 27 de julio de 2026

Client Hints y User-Agents en Chrome, Safari y Firefox

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

PasskeysCheatsheet Icon

Hoja de referencia de Passkeys. Guías prácticas, patrones de despliegue y KPIs para programas de passkeys.

Obtener cheat sheet
Datos clave
  • La reducción de User-Agent se ha completado en todos los navegadores principales: Chrome y Edge desde 2023, Firefox parcialmente y Safari congelado desde iOS 26 lanzado en septiembre de 2025.
  • Firefox no admite Client Hints ni 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.
  • La API de JavaScript getHighEntropyValues() accede a datos de dispositivos de alta entropía únicamente en navegadores Chromium. Safari y Firefox carecen por completo de esta API.
  • La distinción entre Windows 10 y Windows 11 es imposible únicamente a través de cadenas de User-Agent. Solo los Client Hints en Chrome y Edge pueden revelar la versión real de la plataforma.
  • Corbado utiliza los Client Hints para la inteligencia de claves de acceso: detección de nuevos dispositivos y evaluación de la elegibilidad de autenticación entre dispositivos, en particular para distinguir versiones de Windows.

1. Introducción: ¿Qué son los Client Hints y la reducción de User-Agent?#

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:

  • Qué es la reducción de User-Agent: comprender el cambio hacia cadenas de User-Agent reducidas y sus implicaciones.
  • Cómo funcionan los Client Hints: explorar los mecanismos detrás de los Client Hints y cómo se pueden implementar de manera efectiva.

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.

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.

1.1 Breve historia 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.

1.2 Introducción a la reducción de User-Agent y a los Client Hints#

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:

1.2.1 User-Agents en Safari#

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.

1.2.2 User-Agents en Chrome (+ Edge)#

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.

1.2.3 User-Agents en Firefox#

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.

1.2.4 User-Agents en la actualidad (actualizado en septiembre de 2025)#

  • 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.

Substack Icon

Suscríbete a nuestro Substack de passkeys para recibir las últimas noticias.

Suscribirse

2. ¿Qué es la reducción de User-Agent?#

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.

2.1 ¿Qué es un User-Agent clásico?#

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

  • Sistema operativo: el nombre del sistema operativo (por ejemplo, Windows, macOS, Linux).
  • Número de versión del sistema operativo: la versión específica del sistema operativo.
  • Nombre del navegador: el nombre del navegador (por ejemplo, Chrome, Firefox, Safari).
  • Versión del navegador: la versión específica del navegador.
  • Arquitectura: la arquitectura del sistema (por ejemplo, x86, ARM).
  • Tipo/modelo de dispositivo: información sobre el tipo o modelo de dispositivo (por ejemplo, iPhone, Pixel).
  • Otra información: esto puede incluir detalles adicionales como la plataforma, el número de compilación, etc.

2.1.1 ¿Por qué utilizar el User-Agent para la detección de características?#

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).

2.1.2 Comprensión de la entropía en las huellas dactilares: ¿por qué es un problema proporcionar mucha información?#

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.

  • Información de alta entropía: como las versiones específicas de los navegadores y del sistema operativo, contribuyen significativamente a la exclusividad de la huella dactilar de un usuario, facilitando su seguimiento en diferentes sitios web.
  • Información de baja entropía: el nombre general del navegador o del sistema operativo proporcionan datos menos detallados y contribuyen menos al seguimiento de los usuarios, ya que más usuarios llevan esas combinaciones.

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.

2.2 Reducción de la entropía del User-Agent#

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:

2.2.1 Ejemplo 1: reducción de User-Agent de Chrome#

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:

  • Versión del sistema operativo
  • Versión secundaria del navegador
  • Modelo de hardware

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 operativoNombre reducido/fijo
MacMacintosh; Intel Mac OS X 10_15_7
WindowsWindows NT 10.0; Win64; x64
ChromeOSX11; CrOS x86_64 14541.0.0
LinuxX11; Linux x86_64
AndroidLinux; Android 10; K
iOSreducido (iOS 26+)

2.2.2 Ejemplo 2: reducción de User-Agent en Firefox#

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.

2.2.3 Ejemplo 3: reducción del User-Agent de Safari en macOS#

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.

2.2.4 Ejemplo 4: User-Agent de Safari en iOS (ahora reducido en iOS 26+)#

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

2.3 Limitaciones de detección con la reducción de User-Agent#

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.

NavegadorWindowsMacOSiOSAndroid
Chromereducidoreducidoreducido (iOS 26+)reducido
Edgereducidoreducidoreducido (iOS 26+)reducido
Firefoxreducidoreducidoreducido (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):

  • No se pueden distinguir Windows 10 y Windows 11: ya no se pueden distinguir los sistemas Windows 10 y Windows 11 basándose en el User-Agent.
  • No se pueden distinguir los dispositivos Android ni la versión del sistema operativo: a diferencia de Apple, Android solía incluir el modelo de hardware real en el User-Agent. Esto ya no es así. Por lo tanto, ya no se pueden distinguir los diferentes modelos de hardware solo a través del User-Agent. Con Apple, esto nunca ha sido posible.
  • No se pueden distinguir la versión ni la arquitectura de macOS: no hay forma de diferenciar las versiones de macOS ni las arquitecturas de la plataforma basándose en el User-Agent.
  • (*) Versión de macOS en Safari: Safari ha congelado la versión del sistema operativo, pero sigue mostrando la versión de Safari. En el momento de redactar este artículo, para 10.15 y superior, es seguro restar tres a la versión de Safari para detectar la versión principal de macOS.
  • (**) Versión de iOS en Safari 26+: a partir de iOS 26 (septiembre de 2025), Apple ha congelado el User-Agent de iOS/iPadOS, al igual que en macOS. La versión del SO ya no está expuesta.

A continuación, se muestra una tabla que asigna las versiones de macOS a sus correspondientes versiones de Safari:

Versión de macOSVersión de SafariAño de lanzamiento
macOS Sequoia (15)Safari 182024
macOS Sonoma (14)Safari 172023
macOS Ventura (13)Safari 162022
macOS Monterey (12)Safari 152021
macOS Big Sur (11)Safari 142020
macOS Catalina (10.15)Safari 132019

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.

3. ¿Cómo funcionan los Client Hints?#

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:

  • Encabezado HTTP: utilizando encabezados de solicitud HTTP, que solo está disponible para contextos de origen.
  • API de JavaScript: utilizando una API de JavaScript, que puede ser utilizada por un script incrustado.

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.

3.1 ¿Qué Client Hints existen?#

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-CHAPI JS UA-CHEntropía
Sec-CH-UA-Platform-VersionUADataValues.platformVersionAlta
Sec-CH-UA-MobileNavigatorUAData.mobileBaja
Sec-CH-UA-ModelUADataValues.modelAlta
Sec-CH-UANavigatorUAData.brandsBaja
Sec-CH-UA-ArchUADataValues.architectureAlta

3.2 Cómo acceder a los Client Hints a través de encabezados de solicitud HTTP#

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:

  • Encabezados de Client Hints normales
  • Encabezados de (Client) Hints críticos

3.2.1 ¿Cómo utilizar los encabezados de Client Hints normales?#

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

  1. En la primera solicitud para Corbado.com, Chrome ya incluirá los siguientes encabezados de baja entropía, ya que esta información también se incluye en el User-Agent.
EncabezadoValor
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"
  1. Supongamos que Corbado.com deseara recibir la versión del sistema operativo (versión de la plataforma) en solicitudes posteriores. Por lo tanto, establecería entonces el encabezado "Sec-CH-UA-Platform-Version" adecuado en la respuesta a la primera solicitud:
EncabezadoValor
Accept-CHSec-CH-UA-Platform-Version
  1. En las solicitudes posteriores, Corbado.com recibiría entonces un encabezado adicional con la versión de la plataforma:
EncabezadoValor
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.

3.2.2 ¿Cómo utilizar los encabezados de (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

  1. En la primera solicitud a corbado.com, Chrome ya incluirá los siguientes encabezados de baja entropía, ya que esta información también se incluye en el User-Agent.
EncabezadoValor
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"
  1. Supongamos que a corbado.com le gustaría recibir la versión del sistema operativo (versión de la plataforma) en el primer renderizado de la página. A continuación, establecería el encabezado crítico del client hint “Sec-CH-UA-Platform-Version” en la respuesta a la primera solicitud:
EncabezadoValor
Accept-CHSec-CH-UA-Platform-Version
  1. Chrome no iniciaría el renderizado y volvería a intentar la solicitud inmediatamente, para que el encabezado esté disponible en el primer renderizado de corbado.com. A continuación, recibiría el encabezado adicional con la versión de la plataforma:
EncabezadoValor
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.

3.3 Cómo acceder a los Client Hints a través de la API de JavaScript (scripts incrustados)#

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.

4. Recomendación sobre el enfoque actual respecto a los User-Agents#

Dependiendo de su caso de uso, debe utilizar un enfoque diferente para garantizar que su aplicación obtenga el mejor resultado posible:

  • Detección de características: utilice las APIs de JavaScript de los navegadores existentes siempre que sea posible. Siempre que sea posible, base la detección de la funcionalidad directamente en las APIs de los navegadores, en lugar de utilizar el User-Agent. Esto es más fiable y está más preparado para el futuro.
  • Para obtener información de baja entropía, como el tipo de dispositivo: el User-Agent es suficiente. Si su aplicación solo necesita determinar el tipo de dispositivo u otros detalles de baja entropía, la cadena del User-Agent será lo suficientemente detallada. También puede utilizar las APIs existentes para estos fines.
  • Para información de alta entropía y control de dominios: utilice el enfoque de encabezados. Si necesita información detallada y tiene el control sobre el dominio, utilice el enfoque de encabezado HTTP para solicitar información de alta entropía allí donde sea compatible (Chrome, Edge). En todos los demás navegadores (que no envíen encabezados de Client Hints), utilice el User-Agent clásico. Decida si necesita utilizar Client Hints críticos basándose en si necesita la información de forma inmediata o si puede permitirse un ligero retraso.
  • Para las bibliotecas JavaScript: utilice getHighEntropyValues. Si está desarrollando una biblioteca JavaScript, la mejor opción es utilizar la función navigator.userAgentData.getHighEntropyValues() para solicitar dinámicamente información específica sobre el navegador y el dispositivo del usuario siempre que esta función esté definida y recurrir a las bibliotecas de análisis del User-Agent en otros casos.

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):

NavegadorWindowsMacOSiOSAndroid
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.

5. Cómo utilizar los User-Agents y Client Hints para las claves de acceso#

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:

  • Gestión de claves de acceso: en nuestro sitio de gestión de claves de acceso, mostramos toda la información disponible sobre el dispositivo en el que se creó la clave de acceso.
  • Autenticación entre dispositivos: para la autenticación entre dispositivos, utilizamos información sobre el sistema operativo para determinar la probabilidad de que el cliente soporte el uso del CDA. Esto es especialmente importante a la hora de diferenciar entre Windows 10 y 11, lo que solo es posible con los Client Hints en Chrome y Edge:

Más detalles en: https://learn.microsoft.com/en-us/microsoft-edge/web-platform/how-to-detect-win11

  • Inteligencia de claves de acceso: creemos que la plataforma debe decidir si se debe iniciar el inicio de sesión con clave de acceso. Por lo tanto, integramos la mayor lógica posible en nuestros componentes para detectar si se está utilizando un nuevo dispositivo. En estos casos, una versión nueva o más reducida del sistema operativo es un indicio valioso de que las cosas pueden haber cambiado.

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.

6. Conclusión#

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:

  • ¿Qué es la reducción del User-Agent? La reducción del User-Agent es el proceso de minimizar la cantidad de información compartida a través de las cadenas de User-Agent para proteger la privacidad del usuario. Esta transición reduce la granularidad de los datos, como la versión del sistema operativo y el modelo de hardware, que se utilizaban anteriormente para obtener huellas dactilares y realizar un seguimiento de los usuarios en diferentes sitios web. Exploramos cómo afecta esta reducción a los desarrolladores y cómo pueden adaptarse a estos cambios.
  • ¿Cómo funcionan los Client Hints? Los Client Hints proporcionan un mecanismo para solicitar información específica y de alta entropía sobre el dispositivo del usuario de una forma más respetuosa con la privacidad. Mediante el uso de encabezados HTTP y APIs de JavaScript, los desarrolladores pueden acceder a datos detallados sobre el entorno del usuario cuando sea necesario. Hemos analizado cómo se implementan los Client Hints, los tipos de hints disponibles y los métodos para acceder a ellos a través de los encabezados de las solicitudes HTTP y de JavaScript.

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

Acerca de Corbado

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

Preguntas frecuentes#

¿Cómo obtengo la versión real de iOS en mi aplicación web después de iOS 26?#

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.

¿Cuál es la diferencia entre los Client Hints normales y los Client Hints críticos?#

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.

¿Por qué Apple revirtió su decisión original de 2017 de congelar el User-Agent de Safari?#

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.

¿Cómo puedo detectar la versión de macOS en Safari si no se admiten los Client Hints?#

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.

¿Qué enfoque deberían utilizar los desarrolladores de bibliotecas JavaScript para la detección de dispositivos en distintos navegadores?#

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.

Ve qué está pasando realmente en tu despliegue de passkeys.

Explorar la Console

Compartir este artículo


LinkedInTwitterFacebook