¿Qué es la reducción de usuario-agente?

La reducción de Usuario-agente (UA) minimiza la información de identificación compartida en la cadena de Usuario-agente, que puede utilizarse para la creación pasiva de huellas digitales. Ahora que estos cambios se implementaron para la disponibilidad general, todas las solicitudes de recursos tienen un encabezado User-Agent reducido. Como resultado, se reducen los valores que devuelven ciertas interfaces de Navigator, incluidas navigator.userAgent, navigator.appVersion y navigator.platform.

Los desarrolladores web deben revisar el código de su sitio para verificar el uso de la cadena de usuario-agente. Si tu sitio depende del análisis de la cadena de User-Agent para leer el modelo del 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 pistas de cliente de User-Agent permiten acceder al conjunto completo de datos de User-Agent, pero solo cuando los servidores declaran de forma activa una necesidad explícita de datos específicos.

Al quitar los datos del usuario expuestos de forma pasiva, podemos medir y reducir mejor la cantidad de información que se expone de forma intencional a través de los encabezados de solicitud, las APIs de JavaScript y otros mecanismos.

¿Por qué necesitamos reducir la UA y la UA-CH?

Históricamente, la cadena de usuario-agente transmitía una gran cantidad de datos sobre el navegador, el sistema operativo y la versión de un usuario con cada solicitud HTTP. Esto era problemático por dos motivos:

  • La granularidad y la abundancia de detalles pueden llevar a la identificación del usuario.
  • La disponibilidad predeterminada de esta información puede generar un rastreo encubierto.

La reducción de UA y UA-CH mejora la privacidad del usuario, ya que solo se comparte información básica de forma predeterminada.

El usuario-agente reducido incluye la marca del navegador y una versión significativa, el lugar desde el que se envió la solicitud (computadora 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 hizo más larga y compleja, lo que generó un análisis de cadenas propenso a errores. El UA-CH proporciona datos estructurados y confiables que son más fáciles de interpretar. El código existente que analiza la cadena de UA no debería fallar (aunque devolverá menos datos), y deberás migrar a UA-CH si tu sitio necesita información específica del cliente.

¿Cómo funcionan la UA reducida y la UA-CH?

A continuación, se muestra un breve ejemplo de cómo funcionan la cadena de usuario-agente reducida y UA-CH. Para ver un ejemplo más detallado, consulta Mejora la privacidad del usuario y la experiencia del desarrollador con Client Hints de User-Agent.

Un usuario abre el navegador y escribe example.com en la barra de direcciones:

  1. El navegador envía una solicitud para cargar la página web.

    1. El navegador incluye el encabezado User-Agent con la cadena 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
    2. El navegador incluye esa misma información en los encabezados de sugerencia del cliente User-Agent predeterminados. Por ejemplo:

      Sec-CH-UA: "Chrome"; v="98"
      Sec-CH-UA-Mobile: ?1
      Sec-CH-UA-Platform: "Android"
      
  2. El servidor puede solicitarle al navegador que envíe sugerencias del cliente adicionales, como el modelo del 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

  3. El navegador aplica políticas y la configuración del usuario para determinar qué datos se pueden devolver 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 del cliente críticas

Si necesitas un conjunto específico de sugerencias del cliente en tu solicitud inicial, puedes usar el encabezado de respuesta Critical-CH. Los valores de Critical-CH deben ser un subconjunto de los valores solicitados por Accept-CH.

Por ejemplo, la solicitud inicial puede incluir una solicitud para Device-Memory y Viewport-Width, en la que Device-Memory se considera crítica.

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 pista crítica (Critical-CH) para renderizar correctamente la página web, el servidor puede solicitar esta información adicional con el encabezado Accept-CH. Luego, el navegador puede enviar una nueva solicitud 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 solicita solo el subconjunto de valores que debes tener en la carga para cargar la página correctamente. Para obtener más información, consulta la especificación de confiabilidad de las sugerencias del cliente.

Detecta dispositivos tablet con la API de UA-CH

A medida que la línea entre los dispositivos móviles, las tablets y las computadoras de escritorio se vuelve menos clara y los factores de forma dinámicos son más comunes (pantallas plegables, cambio entre el modo de laptop y tablet), es recomendable usar el diseño responsivo y la detección de funciones para presentar una interfaz de usuario adecuada.

Sin embargo, la información que proporciona el navegador para la cadena de usuario-agente y las sugerencias de cliente de usuario-agente proviene de la misma fuente, por lo que deberían funcionar las mismas formas de lógica.

Por ejemplo, si se verifica este patrón en la cadena de UA:

  • Patrón de teléfono: 'Android' + 'Chrome/[.0-9]* Mobile'
  • Patrón para tablets: 'Android' + 'Chrome/[.0-9]* (?!Mobile)'

Se puede verificar la interfaz de los encabezados UA-CH predeterminados coincidentes:

  • Patrón de teléfono: Sec-CH-UA-Platform: "Android", Sec-CH-UA-Mobile: ?1
  • Patrón de 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
  • Patrón para tablets: navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === false

Para los casos de uso específicos del 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 uso y pruebo la UA reducida?

Para comenzar, revisa el código de tu sitio para detectar instancias y usos de la cadena de usuario-agente. Si tu sitio depende del análisis de la cadena User-Agent para leer el modelo del 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 que obtienes los datos esperados del encabezado User-Agent. Existen tres formas de realizar pruebas, cada una con un nivel de complejidad mayor.

La disponibilidad a gran escala para la reducción de usuario-agente significa que la cadena de UA completamente reducida se lanzó en todos los dispositivos Chrome. La reducción comenzó con una versión secundaria de Chrome en el segundo trimestre de 2022.

Prueba cadenas personalizadas de forma local

Si quieres probar tu sitio con cadenas de User-Agent personalizadas para simular diferentes dispositivos, inicia Chrome con la marca 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í.

Como 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 existente de Chrome en tu código del cliente o del servidor, puedes transformar esa cadena al nuevo formato para probar la compatibilidad. Para realizar la prueba, puedes anular y reemplazar la cadena, o bien generar la nueva versión y probarla junto con la anterior.

Compatibilidad con sugerencias del cliente y sugerencias críticas

Se devuelven tres sugerencias del cliente predeterminadas al servidor, incluidos el nombre y la versión principal del navegador, un valor booleano que indica si el navegador se encuentra en un dispositivo móvil y el nombre del sistema operativo. Se envían después del protocolo de enlace de seguridad de la capa de transporte (TLS). Ya están disponibles y son compatibles con tu navegador.

Sin embargo, es posible que, en ocasiones, necesites recuperar información crítica para que se renderice tu sitio.

Optimiza las sugerencias críticas

El 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 intentar la solicitud de inmediato si la primera se envió sin una sugerencia crítica.

Diagrama de secuencia de Client Hints con sugerencias críticas.
Cuando el servidor solicita una sugerencia crítica, el cliente vuelve a intentar enviar la primera solicitud de la página web con la sugerencia crítica. En este ejemplo, la sugerencia para Sec-CH-UA-Model se solicita dos veces: una como sugerencia del cliente con Accept-CH y otra como sugerencia crítica con Critical-CH.

Para optimizar las sugerencias críticas (encabezado Critical-CH), debes interceptar este handshake y proporcionar un modelo para las sugerencias del cliente. Estos pasos pueden ser complejos y requieren conocimientos avanzados.

Los marcos ACCEPT_CH de HTTP/2 y HTTP/3, combinados con la extensión ALPS de TLS, son una optimización a nivel de la conexión para entregar las preferencias de sugerencias del cliente del servidor a tiempo para la primera solicitud HTTP. Estos requieren una configuración compleja, y recomendamos usarlos solo para información realmente crítica.

BoringSSL (una bifurcación de OpenSSL) te ayuda a trabajar con las funciones experimentales de Google en Chromium. En este momento, ALPS solo está implementado en BoringSSL.

Si necesitas usar sugerencias críticas, consulta nuestra guía sobre la confiabilidad y la optimización de las sugerencias críticas.

Preguntas frecuentes

¿Durante cuánto tiempo se enviarán las sugerencias especificadas a través del encabezado Accept-CH?

Las sugerencias especificadas a través del encabezado Accept-CH se enviarán durante la sesión del navegador o hasta que se especifique otro conjunto de sugerencias.

¿Funciona UA-CH 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 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 a través de Permissions-Policy para cualquier subrecurso de origen cruzado o se debe obtener a través de JavaScript que se ejecuta en el contexto de origen cruzado.

¿Cómo afecta la reducción del usuario-agente a la detección de bots?

El cambio de Chrome en su cadena de usuario-agente no afecta directamente la cadena 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 una decisión de implementación que les corresponde tomar. Chrome sigue enviando el mismo formato de User-Agent, y los bots que agregan su propio identificador al final de una cadena de User-Agent de Chrome pueden seguir haciéndolo.

Si tienes alguna inquietud sobre bots específicos, tal vez valga la pena comunicarte directamente con los propietarios para preguntarles si tienen planes de cambiar su cadena de usuario-agente.

Interactúa y comparte comentarios

Más información