Glosario

Qué envían los user agent client hints y qué sigue viendo la analítica

Taras Shynkarenko
Taras Shynkarenko
•Actualizado: •11 min de lectura
Qué envían los user agent client hints y qué sigue viendo la analíticaQué envían los user agent client hints y qué sigue viendo la analítica

TL;DR, Respuesta rápida

11 min de lectura

Los User-Agent Client Hints son el sustituto de Chromium para la cadena User-Agent completa. Cada petición lleva tres encabezados de baja entropía, Sec-CH-UA, Sec-CH-UA-Mobile y Sec-CH-UA-Platform, con la marca del navegador, la versión principal, un indicador de móvil y el nombre del sistema operativo. Un servidor pide más, como la versión del sistema operativo o el modelo del dispositivo, con un encabezado de respuesta Accept-CH, o un script llama a navigator.userAgentData.getHighEntropyValues(). Desde Chrome 110, la propia cadena UA está congelada en valores de plataforma fijos. Firefox y Safari no admiten client hints.

¿Qué son los user agent client hints?

Los navegadores Chromium envían los user agent client hints como un conjunto de encabezados de petición Sec-CH-UA que llevan los datos del navegador y de la plataforma en campos separados, y solo envían los campos detallados cuando un servidor los pide. La documentación para desarrolladores de Chrome dice que el modelo es uno "where the server must ask the browser for a set of data about the client (the hints) and the browser applies its own policies or user configuration to determine what data is returned." Los hints están activados por defecto desde Chrome 89.

El antiguo encabezado User-Agent metía todo en una sola cadena en cada petición: navegador, versión completa, sistema operativo y su versión, y en Android el modelo del dispositivo. El artículo de Google sobre el cambio dice que esa combinación "could contain enough information to allow individual users to be uniquely identified." Los client hints la dividen para que la petición por defecto lleve menos, y cualquier dato extra haya que pedirlo de una forma que el navegador pueda ver.

Si gestionas la analítica de un sitio web, esto afecta a dos informes: los desgloses por navegador y sistema operativo, y el tipo de dispositivo. Los dos siguen funcionando en Chrome, pero algunos detalles que antes llegaban gratis ahora están detrás de una solicitud explícita.

Una petición, antes y después
Antiguo encabezado User-Agent
  • Navegador y versión completa
  • Sistema operativo y versión
  • Modelo del dispositivo en Android
  • Todo en cada petición
Petición por defecto de Chrome
  • Marca del navegador y versión principal
  • Indicador de móvil
  • Nombre del sistema operativo
  • Cualquier otro dato espera a que el servidor lo pida
La petición por defecto lleva menos datos, y el detalle extra hay que pedirlo de forma que el navegador pueda verlo.

¿Qué encabezados Sec-CH-UA envía Chrome?

Chrome envía tres encabezados Sec-CH-UA en cada petición HTTPS y retiene el resto hasta que el servidor los pide. La especificación del WICG define once encabezados. Los que importan para la analítica:

EncabezadoValor de ejemploEntropía¿Se envía por defecto?
Sec-CH-UA"Chromium";v="93", "Google Chrome";v="93"BajaSí
Sec-CH-UA-Mobile?0 para escritorio, ?1 para móvilBajaSí
Sec-CH-UA-Platform"macOS"BajaSí
Sec-CH-UA-Platform-Version"10.0.0"AltaNo, requiere Accept-CH
Sec-CH-UA-Full-Version-List"Google Chrome";v="98.0.4738.0"AltaNo, requiere Accept-CH
Sec-CH-UA-Model"Pixel 3"AltaNo, requiere Accept-CH
Sec-CH-UA-Arch"arm"AltaNo, requiere Accept-CH
Sec-CH-UA-Bitness"64"AltaNo, requiere Accept-CH

La especificación también define Sec-CH-UA-WoW64, Sec-CH-UA-Form-Factors y el obsoleto Sec-CH-UA-Full-Version. Los client hints solo viajan por conexiones seguras, así que una página servida por HTTP sin cifrar no recibe ninguno.

La lista de marcas trae una rareza intencionada. Incluye una marca falsa como " Not;A Brand";v="99", que la documentación de Chrome llama GREASE y que puede aparecer en cualquier posición y con cualquier nombre. MDN explica que existe para evitar que los servidores acaben "rejecting unknown user agents outright." Cualquier parser que escribas tiene que ignorar las marcas que no reconoce en lugar de fiarse de la posición.

¿Qué diferencia hay entre los hints de baja y de alta entropía?

Los hints de baja entropía son los campos que un navegador envía a todos los sitios porque revelan poco más de lo que ya muestran otros encabezados, y los de alta entropía son los campos que acotan un navegador lo suficiente como para ayudar a identificarlo. La especificación del WICG dice que los hints por defecto exponen "only the user agent's branding information, and the significant version number," y que ambos son "fairly clearly sniffable" a partir de otros encabezados y de las funciones que admite el navegador.

"Alta entropía" viene de la teoría de la información. La documentación de Chrome describe el término como una referencia a "the amount of information that these values reveal about the user's browser." Un nombre de modelo como Pixel 3 o una compilación exacta como 98.0.4738.0 divide la población de usuarios de Chrome en grupos mucho más pequeños que "Chrome 98 en Android". La guía de huella digital del navegador explica cómo se suman esos campos al combinarse.

Filas de cables de red conectados a un rack de servidores, como imagen de las solicitudes y respuestas que llevan los encabezados Accept-CH entre navegador y servidor.

¿Cómo pide un sitio hints de alta entropía con Accept-CH?

Un sitio pide hints de alta entropía devolviendo un encabezado de respuesta Accept-CH que nombra los hints que quiere, y a partir de ahí el navegador decide si los envía en las peticiones posteriores a ese origen. El intercambio tiene cuatro pasos:

  1. El navegador pide una página y solo envía Sec-CH-UA, Sec-CH-UA-Mobile y Sec-CH-UA-Platform.
  2. El servidor responde con un encabezado como Accept-CH: Sec-CH-UA-Full-Version-List, Sec-CH-UA-Model, o la página incluye la misma lista en una etiqueta <meta http-equiv="Accept-CH">.
  3. Las peticiones posteriores a ese origen llevan los hints pedidos, si la política del navegador lo permite.
  4. Un nuevo encabezado Accept-CH sustituye por completo el conjunto anterior, y uno vacío lo borra.

Tres reglas de la documentación de Chrome despistan a mucha gente. Los hints pedidos mediante Accept-CH duran "for the duration of the browser session or until a different set of hints are specified." Solo se envían en peticiones del mismo origen, así que una petición a cdn.example.net no recibe nada a menos que la página delegue cada hint con un encabezado Permissions-Policy. Y una primera visita solo lleva los hints por defecto, porque el servidor todavía no los ha pedido. Chromium documenta un mecanismo aparte para los hints que un sitio necesita en la primera petición.

Los scripts tienen una segunda vía. navigator.userAgentData expone los valores de baja entropía como brands, mobile y platform, y navigator.userAgentData.getHighEntropyValues() devuelve una promesa con campos como model, platformVersion y fullVersionList. Igual que con los encabezados, Chrome dice que "it's down to the browser what values, if any, are returned."

¿Qué cambió la reducción del User-Agent en Chrome?

La reducción del User-Agent congeló la mayor parte de la cadena User-Agent de Chrome en valores fijos, así que el antiguo encabezado ahora solo lleva la versión principal del navegador, una cadena de plataforma fija y un marcador de móvil. El proyecto Chromium lo desplegó por fases:

Versión de ChromeLanzamientoCambio en la cadena UA
Chrome 10126 de abril de 2022Números menor, de compilación y de parche congelados en 0.0.0
Chrome 10725 de octubre de 2022Plataforma y versión del sistema operativo de escritorio sustituidas por valores fijos
Chrome 1107 de febrero de 2023Versión de Android fijada en 10 y modelo del dispositivo sustituido por K
Chrome 1132023Fin de la reverse origin trial, así que todas las cargas de página reciben la cadena reducida

Los valores fijos de plataforma de escritorio son cadenas literales. Chromium los lista como Windows NT 10.0; Win64; x64, Macintosh; Intel Mac OS X 10_15_7, X11; Linux x86_64 y X11; CrOS x86_64 14541.0.0, y todos los teléfonos Android indican Linux; Android 10; K. Chromium señala que estos valores "will not update even if a user is on an updated operating system or device." La reducción se aplica a Windows, macOS, Linux, ChromeOS y Chrome en Android. Chromium no tiene planes actuales para iOS ni para Android WebView.

La página de Chromium es explícita sobre dónde fue a parar el detalle antiguo: "All of the information that was contained in the User-Agent string prior to reduction is available through the high entropy client hints."

Flowsery
Flowsery

Empieza tu prueba gratis de 14 días

Panel en tiempo real

Seguimiento de objetivos

Rastreo sin cookies

¿Qué navegadores admiten los user agent client hints?

Los navegadores Chromium admiten los user agent client hints, y Firefox y Safari no. Los datos de compatibilidad de navegadores de MDN indican que Sec-CH-UA está admitido en Chrome y Edge desde la versión 89 y en Opera desde la versión 75, y marcan tanto Sec-CH-UA como Accept-CH como no admitidos en Firefox y Safari. navigator.userAgentData sigue el mismo reparto.

Eso deja a la analítica con dos vías de parseo. En Chrome y Edge, la cadena UA reducida más los hints de baja entropía dan el navegador, la versión principal, el nombre del sistema operativo y un indicador de móvil. En Firefox y Safari, el encabezado User-Agent sigue siendo la única fuente, y WebKit también ha congelado su propia cadena. Su página de tracking prevention incluye, entre sus cambios contra el fingerprinting, que WebKit "altered the user agent string to not change with minor software updates."

Varios smartphones junto a un portátil sobre un escritorio, que muestran la mezcla de dispositivos y navegadores que un informe de analítica debe distinguir.

¿Qué puede seguir leyendo una herramienta de analítica para los informes de navegador, sistema operativo y dispositivo?

Una herramienta de analítica sigue leyendo el nombre del navegador, la versión principal, la familia del sistema operativo y si es móvil o escritorio en cada visita de Chrome sin pedir nada, pero la versión del sistema operativo y el modelo del dispositivo necesitan hints de alta entropía. El desglose práctico para un visitante de Chrome:

Campo del informeDesde la cadena UA reducidaDesde los hints de baja entropía por defectoNecesita un hint de alta entropía
Nombre del navegadorSíSí, Sec-CH-UANo
Versión principal del navegadorSíSí, Sec-CH-UANo
Versión completa del navegadorNo, muestra .0.0.0NoSec-CH-UA-Full-Version-List
Nombre del sistema operativoSíSí, Sec-CH-UA-PlatformNo
Versión del sistema operativoNo, valor fijoNoSec-CH-UA-Platform-Version
Móvil o escritorioSí, token MobileSí, Sec-CH-UA-MobileNo
Modelo del teléfonoNo, muestra KNoSec-CH-UA-Model

Todos los visitantes de Windows 11 en Chrome indican Windows NT 10.0 en la cadena UA, así que un reparto entre Windows 10 y 11 basado en la cadena UA es incorrecto. Las visitas de Chrome en Android dicen todas que son la versión 10. Si un gráfico de versiones del sistema operativo en tu analítica muestra una sola versión acaparándolo todo entre finales de 2022 y mediados de 2023, eso es la reducción, no tu audiencia. La detección de bots también se complica, porque un cliente automatizado copia una cadena de Chrome actual con una línea de código; la guía sobre el filtrado de tráfico de bots cubre comprobaciones que no dependen solo del UA.

¿Los user agent client hints reducen el fingerprinting?

Los user agent client hints reducen el fingerprinting pasivo, porque un sitio ya no recibe la versión completa, la versión del sistema operativo y el modelo del dispositivo en cada petición, pero no frenan a un script que pide valores de alta entropía a propósito. La especificación del WICG recoge las dos mitades: el objetivo es "reduce the amount of default entropy exposed to the web at large," y aun así "it will still be possible for some, or all, hints to be requested and used for active fingerprinting purposes."

La diferencia está en la visibilidad. Una petición de Sec-CH-UA-Model aparece en el encabezado Accept-CH del sitio o en una llamada a getHighEntropyValues(), algo que las herramientas de privacidad y los auditores pueden detectar. La cadena antigua entregaba los mismos datos sin que se notara. Para el dueño de un sitio, la regla es sencilla: pide un hint de alta entropía solo cuando una función lo necesite, como elegir la descarga correcta para una arquitectura de CPU, y no para enriquecer perfiles de analítica.

¿Qué informa Flowsery sobre navegadores y dispositivos?

Flowsery informa de datos de dispositivo, navegador y sistema operativo en su analítica, y lo hace sin huella digital del navegador, sin cookies en su modo sin cookies y sin guardar datos personales. La API de Flowsery devuelve desgloses por navegador con el número de visitantes y los ingresos por navegador, filtra por nombre de navegador como Chrome, Safari, Firefox y Edge, con "Safari includes Mobile Safari automatically," y agrupa a los visitantes por dimensiones que incluyen browser_version y os_version. El endpoint de visitante devuelve el tipo de dispositivo, el navegador, el sistema operativo y las dimensiones del viewport de la página vista más reciente. En el modo sin cookies, Flowsery usa un hash de visitante que rota cada día, así que estos campos describen sesiones en tu sitio sin construir un perfil de un dispositivo que dure más de un día, una de las razones por las que los visitantes únicos significan cosas distintas en herramientas distintas. La página de la función de analítica centrada en la privacidad lista lo que recoge el rastreador.

Preguntas frecuentes

¿Los user agent client hints sustituyen al encabezado User-Agent?

No, Chrome sigue enviando el encabezado User-Agent, pero en una forma reducida con la versión menor congelada y valores de plataforma fijos. El detalle que se le quitó está disponible mediante los client hints de alta entropía, que un sitio tiene que pedir.

¿Firefox envía encabezados Sec-CH-UA?

No. Los datos de compatibilidad de MDN marcan Sec-CH-UA y Accept-CH como no admitidos en Firefox y Safari. Esos navegadores siguen describiéndose solo mediante el encabezado User-Agent.

¿Por qué mi analítica muestra a todos los usuarios de Android en Android 10?

Chrome 110 fijó la versión de Android en la cadena UA en 10 y sustituyó el modelo del dispositivo por K. Cualquier herramienta que solo parsee la cadena UA indica Android 10 para cada visita de Chrome en Android. La versión real necesita el hint Sec-CH-UA-Platform-Version.

¿Puede la analítica distinguir Windows 11 de Windows 10 en Chrome?

No a partir de la cadena UA, que indica Windows NT 10.0 para los dos. Un sitio que pide Sec-CH-UA-Platform-Version mediante Accept-CH, o que llama a getHighEntropyValues(), recibe la versión de plataforma que Chrome decida compartir.

¿Necesito HTTPS para los client hints?

Sí. Chrome solo envía client hints por conexiones seguras, así que un sitio con HTTP sin cifrar no recibe ningún encabezado Sec-CH-UA.

¿Los client hints de alta entropía son datos personales?

Por sí solos, un modelo de dispositivo o un número de compilación del sistema operativo no identifican a una persona. Combinados con otras señales en un identificador estable, pasan a formar parte de una huella digital, y una huella digital que distingue a un dispositivo cuenta como dato personal según el RGPD, que es por lo que la analítica centrada en la privacidad evita construir una.

¿Qué es la marca falsa del encabezado Sec-CH-UA?

Es una entrada GREASE como " Not;A Brand";v="99", que puede aparecer en cualquier posición y con cualquier nombre. Existe para evitar que los servidores rechacen sin más los user agents desconocidos. Un parser debe ignorar las marcas que no reconoce en lugar de guiarse por la posición.

Flowsery
Flowsery

Empieza tu prueba gratis de 14 días

Panel en tiempo real

Seguimiento de objetivos

Rastreo sin cookies

¿Cómo obtengo la versión completa de Chrome o el modelo del dispositivo en analítica?

Devuelve un encabezado Accept-CH que nombre los hints que quieres, como Sec-CH-UA-Full-Version-List y Sec-CH-UA-Model. Un script también puede llamar a navigator.userAgentData.getHighEntropyValues(). En ambos casos el navegador decide qué devuelve, si es que devuelve algo.

¿Los client hints llegan a las peticiones a otros dominios?

Los hints pedidos con Accept-CH solo se envían en peticiones del mismo origen. Una petición a cdn.example.net no recibe nada, a menos que la página delegue cada hint con un encabezado Permissions-Policy.

¿Chrome envía hints de alta entropía en la primera visita?

La primera visita lleva solo los tres hints por defecto, porque el servidor aún no ha pedido más. Cuando el servidor envía Accept-CH, las peticiones posteriores incluyen los hints pedidos durante la sesión del navegador o hasta que se especifique otro conjunto. Chromium documenta un mecanismo aparte para los hints que un sitio necesita en la primera petición.

¿Te resultó útil este artículo?

¡Cuéntanos qué opinas!

Vernos más en Google

Un clic marca Flowsery como fuente preferida y nuestros artículos aparecen más arriba en tus Noticias destacadas, el modo IA y los resúmenes con IA.

Antes de irte...

Flowsery

Flowsery

Analítica orientada a ingresos para tu sitio web

Rastrea cada visitante, fuente y conversión en tiempo real. Simple, potente y sin cookies.

Panel en tiempo real

Seguimiento de objetivos

Rastreo sin cookies

Términos relacionados del glosario

Por qué el CNAME cloaking ya no oculta rastreadores a Safari ni a BravePor qué el CNAME cloaking ya no oculta rastreadores a Safari ni a Brave
Glosario

Por qué el CNAME cloaking ya no oculta rastreadores a Safari ni a Brave

Los rastreadores usaban el CNAME cloaking para pasar por tu subdominio. Mira el truco DNS, el límite de 7 días de Safari y cómo Brave y uBlock lo destapan.

•10 min de lectura
Cómo la sincronización de cookies empareja IDs publicitarios entre sitiosCómo la sincronización de cookies empareja IDs publicitarios entre sitios
Glosario

Cómo la sincronización de cookies empareja IDs publicitarios entre sitios

El ad-tech usa la sincronización de cookies para intercambiar IDs con redirecciones y píxeles. Mira qué hacen Safari, Firefox y Chrome al respecto.

•10 min de lectura
Cómo crear métricas calculadas de GA4 con una cuota de cinco huecosCómo crear métricas calculadas de GA4 con una cuota de cinco huecos
Glosario

Cómo crear métricas calculadas de GA4 con una cuota de cinco huecos

Google limita las métricas calculadas de GA4 a 5 por propiedad estándar. Aprende la sintaxis, las unidades, dónde aparecen y qué no admite una fórmula.

•10 min de lectura
Cómo configurar la agrupación de contenido de GA4 con un solo parámetroCómo configurar la agrupación de contenido de GA4 con un solo parámetro
Glosario

Cómo configurar la agrupación de contenido de GA4 con un solo parámetro

Configura la agrupación de contenido de GA4 con el parámetro content_group en gtag o Tag Manager, lee la dimensión Content group y evita filas (not set).

•9 min de lectura
Por qué el significado de visitantes únicos cambia según la herramientaPor qué el significado de visitantes únicos cambia según la herramienta
Glosario

Por qué el significado de visitantes únicos cambia según la herramienta

El significado de visitantes únicos depende de la herramienta: GA4 lo estima, Matomo no lo calcula en rangos largos y Adobe deduplica en todo el informe.

•8 min de lectura
Google enumera siete causas distintas de not set en GA4Google enumera siete causas distintas de not set en GA4
Glosario

Google enumera siete causas distintas de not set en GA4

Google da a not set en GA4 una causa distinta por dimensión, desde un session_start ausente hasta un content_group vacío. Aquí cada causa y su arreglo.

•9 min de lectura

Artículos relacionados