La reducción de usuario-agente (UA) minimiza la información de identificación compartida en la cadena de usuario-agente, que se puede usar para la creación de huellas digitales pasiva. Ahora que se lanzaron estos cambios para la disponibilidad general, todas las solicitudes de recursos tienen un encabezado User-Agent
reducido. Como resultado, los valores que se muestran de ciertas interfaces Navigator
se reducen, incluidas navigator.userAgent
, navigator.appVersion
y navigator.platform
.
Los desarrolladores web deben revisar el código de su sitio para ver si usa la cadena usuario-agente. Si tu sitio depende del análisis de la cadena de usuario-agente para leer el modelo de dispositivo, la versión de la plataforma o la versión completa del navegador, deberás implementar la API de User-Agent Client Hints.
User-Agent Client Hints (UA-CH)
Las sugerencias de clientes de usuario-agente permiten el acceso al conjunto completo de datos de usuario-agente, pero solo cuando los servidores declaran de forma activa una necesidad explícita de datos específicos.
Cuando se quitan los datos del usuario expuestos de forma pasiva, medimos y reducimos mejor la cantidad de información que se expone intencionalmente a través de encabezados de solicitudes, APIs de JavaScript y otros mecanismos.
¿Por qué necesitamos una reducción de UA y UA-CH?
Históricamente, la cadena usuario-agente transmitía una gran cadena de datos sobre el navegador, el sistema operativo y la versión de un usuario con cada solicitud HTTP. Esto fue un problema por dos razones:
- El nivel de detalle y la abundancia de detalles pueden conducir a la identificación de los usuarios.
- La disponibilidad predeterminada de esta información puede llevar a un seguimiento encubierto.
Ahora, UA y UA-CH mejoran la privacidad del usuario, ya que solo comparten información básica de forma predeterminada.
El usuario-agente reducido incluye la marca del navegador y una versión significativa de la que proviene la solicitud (computadora de escritorio o dispositivo móvil) y la plataforma. Para acceder a más datos, User-Agent Client Hints te permite solicitar información específica sobre el dispositivo o las condiciones del usuario.
Además, con el tiempo, la cadena User-Agent
se volvió más larga y compleja, lo que generó un análisis de cadenas propenso a errores. UA-CH brinda datos estructurados y confiables
que son más fáciles de interpretar. El código existente que analiza la cadena de UA no debe romperse (aunque mostrará menos datos) y deberás migrar a UA-CH si tu sitio necesita información específica del cliente.
¿Cómo funcionan la reducción de UA y UA-CH?
A continuación, se incluye un breve ejemplo de cómo funcionan la cadena usuario-agente reducida y UA-CH. Si quieres obtener un ejemplo más detallado, consulta Cómo mejorar la privacidad del usuario y la experiencia del desarrollador con User-Agent Client Hints.
Un usuario abre el navegador e ingresa example.com
en la barra de direcciones:
El navegador envía una solicitud para cargar la página web.
- El navegador incluye el encabezado
User-Agent
con la string de usuario-agente reducida. Por ejemplo:User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Mobile Safari/537.36
El navegador incluye esa misma información en los encabezados predeterminados de User-Agent Client Hint. Por ejemplo:
Sec-CH-UA: "Chrome"; v="98" Sec-CH-UA-Mobile: ?1 Sec-CH-UA-Platform: "Android"
- El navegador incluye el encabezado
El servidor puede pedirle al navegador que envíe más sugerencias de clientes, como el modelo de dispositivo, con el encabezado de respuesta
Accept-CH
. Por ejemplo:Accept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, Sec-CH-UA-Model
El navegador aplica políticas y la configuración del usuario para determinar qué datos pueden regresar al servidor en los encabezados de solicitudes posteriores. Por ejemplo:
Sec-CH-UA: "Chrome"; v="93" Sec-CH-UA-Mobile: ?1 Sec-CH-UA-Platform: "Android" Sec-CH-UA-Model: "Pixel 2"
Sugerencias fundamentales para el cliente
Si necesitas un conjunto específico de Client Hints en tu solicitud inicial, puedes usar el encabezado de respuesta Critical-CH
. Los valores de Critical-CH
deben ser un subconjunto de los valores que solicita Accept-CH
.
Por ejemplo, la solicitud inicial puede incluir una solicitud para Device-Memory
y Viewport-Width
, en la que Device-Memory
se considera fundamental.
GET / HTTP/1.1
Host: example.com
HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Device-Memory, Viewport-Width
Vary: Device-Memory, Viewport-Width
Critical-CH: Device-Memory
Si el navegador requiere una sugerencia crítica (Critical-CH
) para procesar la página web correctamente, el servidor puede solicitar esta información adicional con el encabezado Accept-CH
. Luego, el navegador puede enviar una solicitud nueva para la página, incluida la sugerencia crítica.
En resumen, Accept-CH
solicita todos los valores que deseas para la página, mientras que Critical-CH
solo solicita el subconjunto de valores que debes tener cargado para que la página se cargue correctamente. Consulta la especificación de confiabilidad de Client Hints para obtener más información.
Detecta tablets con la API de UA-CH
Dado que la línea entre los dispositivos móviles, las tablets y las computadoras de escritorio se vuelve cada vez menos distinta, y los factores de forma dinámicos son cada vez más comunes (pantallas plegables, alternar entre los modos laptop y tablet), se recomienda usar un diseño responsivo y una detección de funciones para presentar una interfaz de usuario adecuada.
Sin embargo, la información que proporciona el navegador para la string de usuario-agente y las sugerencias de clientes de usuario-agente proviene de la misma fuente, por lo que deberían funcionar las mismas formas de lógica.
Por ejemplo, si este patrón se marca en la cadena UA, ocurrirá lo siguiente:
- Patrón de teléfono:
'Android' + 'Chrome/[.0-9]* Mobile'
- Diseño de la tablet:
'Android' + 'Chrome/[.0-9]* (?!Mobile)'
Se puede marcar la interfaz de encabezados UA-CH predeterminados que coinciden:
- Patrón de teléfono:
Sec-CH-UA-Platform: "Android"
,Sec-CH-UA-Mobile: ?1
- Patrón de la tablet:
Sec-CH-UA-Platform: "Android"
,Sec-CH-UA-Mobile: ?0
O la interfaz de JavaScript equivalente:
- Patrón de teléfono:
navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === true
- Diseño de la tablet:
navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === false
Para casos de uso específicos de hardware, el nombre del modelo del dispositivo se puede solicitar a través de la sugerencia Sec-CH-UA-Model
de alta entropía.
¿Cómo utilizo y pruebo las UA reducidas?
Para comenzar, revisa el código de tu sitio en busca de instancias y usos de la cadena usuario-agente. Si tu sitio depende del análisis de la cadena de usuario-agente para leer el modelo de dispositivo, la versión de la plataforma o la versión completa del navegador, deberás implementar la API de UA-CH.
Una vez que hayas actualizado a la API de UA-CH, debes realizar pruebas para asegurarte de obtener los datos que esperas del usuario-agente. Hay tres formas de realizar pruebas, cada una aumenta en complejidad.
La disponibilidad escalada para la reducción de usuario-agente implica que la cadena de UA completamente reducida se envía a todos los dispositivos Chrome. La reducción comenzó con una versión secundaria de Chrome en el segundo trimestre de 2022.
Cómo probar cadenas personalizadas de forma local
Si quieres probar tu sitio con cadenas de usuario-agente personalizadas para simular diferentes dispositivos, inicia Chrome con la función experimental de línea de comandos --user-agent="Custom string here"
. Obtén más información sobre las marcas de línea de comandos aquí.
De manera alternativa, usa el emulador de dispositivos en las Herramientas para desarrolladores de Chrome.
Transforma la cadena en el código de tu sitio
Si procesas la cadena user-agent
de Chrome existente en el código del cliente o del servidor, puedes transformar esa cadena al formato nuevo para probar la compatibilidad. Para realizar la prueba, puedes anular y reemplazar la cadena, o generar la versión nueva y realizar pruebas en paralelo.
Compatibilidad con Client Hints y sugerencias críticas
Hay tres sugerencias de clientes predeterminadas que se muestran al servidor, incluido el nombre del navegador y la versión principal, un valor booleano que indica si el navegador está en un dispositivo móvil y el nombre del sistema operativo. Estas se envían después del protocolo de enlace del protocolo de seguridad de la capa de transporte (TLS). Estas ya están disponibles y compatibles con tu navegador.
Sin embargo, puede haber ocasiones en las que necesites recuperar información crítica para que tu sitio renderice.
Optimiza las sugerencias críticas
Un protocolo de enlace TLS es el primer paso para crear una conexión segura entre el navegador y el servidor web. Sin una intervención, el encabezado de respuesta Critical-CH se diseñó para indicarle al navegador que vuelva a realizar la solicitud de inmediato si la primera se envió sin una sugerencia crítica.
Para optimizar las sugerencias críticas (encabezado Critical-CH
), debes interceptar este protocolo de enlace y proporcionar un modelo para Client Hints. Estos pasos pueden ser complejos y requerir conocimientos avanzados.
Los tramas ACCEPT_CH
HTTP/2 y HTTP/3,
combinados con la extensión TLS ALPS,
son una optimización a nivel de la conexión para entregar las preferencias de Client Hint del servidor a tiempo para la primera solicitud HTTP. Estas requieren una configuración compleja, y recomendamos su uso solo para información verdaderamente crítica.
BoringSSL (una bifurcación de OpenSSL) te ayuda a trabajar con las funciones experimentales de Google en Chromium. Por el momento, ALPS solo se implementa en BoringSSL.
Si necesitas usar sugerencias críticas, consulta nuestra guía sobre fiabilidad y optimización de sugerencias críticas.
Preguntas frecuentes
¿Durante cuánto tiempo se enviarán las sugerencias especificadas en el encabezado Accept-CH
?
Las sugerencias que se especifiquen en el encabezado Accept-CH
se enviarán durante la
sesión del navegador o hasta que se especifique un conjunto diferente de sugerencias.
¿UA-CH funciona con HTTP/2 y HTTP/3?
UA-CH funciona con conexiones HTTP/2 y HTTP/3.
¿Los subdominios (y los CNAME) requieren una página de nivel superior Permissions-Policy
para acceder a UA-CH de alta entropía?
El UA-CH de alta entropía en los encabezados de la solicitud está restringido en las solicitudes de origen cruzado, independientemente de cómo se defina ese origen en el DNS. La delegación se debe controlar mediante Permissions-Policy
para cualquier subrecurso de origen cruzado, o bien se debe obtener mediante JavaScript que se ejecute en el contexto de origen cruzado.
¿Cómo afecta la reducción de usuario-agente a la detección de bots?
El cambio de Chrome en su string de usuario-agente no afecta directamente a la string de usuario-agente que un bot elige enviar.
Los bots pueden optar por actualizar sus propias cadenas para reflejar la información reducida que envía Chrome, pero esa es toda su elección de implementación. Chrome sigue enviando el mismo formato de usuario-agente, y los bots que agregan su propio identificador al final de una cadena de usuario-agente de Chrome pueden continuar haciéndolo.
Si tienes inquietudes sobre bots específicos, puedes comunicarte directamente con los propietarios para preguntarles si tienen planes de cambiar su string de usuario-agente.
Interactúa y comparte comentarios
- Prueba de origen: Comparte tus comentarios sobre pruebas de origen anteriores.
- Demostración: Prueba nuestra demostración de reducción de usuario-agente.
- GitHub: Lee la explicación de UA-CH, genera preguntas y sigue el debate.
- Asistencia para desarrolladores: Haz preguntas y únete a debates en el repositorio de asistencia para desarrolladores de Privacy Sandbox.
Más información
- Mejora de la privacidad del usuario y la experiencia de los desarrolladores: Descripción general para desarrolladores web
- Cómo migrar de una cadena de UA a UA-CH: un instructivo para desarrolladores web
- Más detalles sobre Privacy Sandbox