¿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 usarse para la creación pasiva de huellas digitales. Ahora que estos cambios se lanzaron para la disponibilidad general, todas las solicitudes de recursos tienen un encabezado User-Agent reducido. Como resultado, se reducen los valores que se muestran de ciertas interfaces Navigator, como 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 User-Agent. Si tu sitio depende del análisis de la cadena de usuario-agente 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 Client Hints de usuario-agente.

Sugerencias de clientes de usuario-agente (UA-CH)

Las sugerencias de cliente del usuario-agente permiten el acceso al conjunto completo de datos del usuario-agente, pero solo cuando los servidores declaran de forma activa una necesidad explícita de datos específicos.

Cuando quitamos los datos del usuario expuestos de forma pasiva, medimos y reducimos mejor la cantidad de información que los encabezados de solicitud, las APIs de JavaScript y otros mecanismos exponen de forma intencional.

¿Por qué necesitamos UA y UA-CH reducidos?

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 fue problemático por dos motivos:

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

Los UA reducidos y los UA-CH mejoran la privacidad del usuario, ya que comparten solo información básica de forma predeterminada.

El usuario-agente reducido incluye la marca del navegador y una versión significativa, el origen de la solicitud (computadora de escritorio o dispositivo móvil) y la plataforma. Para acceder a más datos, las sugerencias de cliente del usuario-agente te permiten 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. UA-CH proporciona datos estructurados y confiables que son más fáciles de interpretar. El código existente que analiza la cadena UA no debería 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 UA y UA-CH reducidos?

Este es un breve ejemplo de cómo funcionan la cadena de usuario-agente reducida y UA-CH. Para ver un ejemplo más detallado, consulta Cómo mejorar la privacidad del usuario y la experiencia del desarrollador con las Client Hints de usuario-agente.

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 del usuario-agente predeterminados. Por ejemplo:

      Sec-CH-UA: "Chrome"; v="98"
      Sec-CH-UA-Mobile: ?1
      Sec-CH-UA-Platform: "Android"
      
  2. El servidor puede pedirle al navegador que envíe sugerencias de 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 configuración del usuario para determinar qué datos se pueden mostrar al servidor en los encabezados de solicitud 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 de clientes 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 que solicita Accept-CH.

Por ejemplo, la solicitud inicial puede incluir una solicitud de 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 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 solo solicita el subconjunto de valores que debes tener durante la carga para cargar la página correctamente. Consulta la especificación de confiabilidad de las sugerencias del cliente para obtener más información.

Cómo detectar dispositivos de 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 distinta y los factores de forma dinámicos son más comunes (pantallas plegables, cambio entre el modo de laptop y el modo de tablet), se recomienda usar diseño responsivo y detección de funciones para presentar una interfaz de usuario adecuada.

Sin embargo, la información que proporciona el navegador para la cadena de User-Agent y las sugerencias del cliente de User-Agent proviene de la misma fuente, por lo que deberían funcionar los mismos tipos de lógica.

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

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

Se puede verificar 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 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 de tablet: navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === false

En el caso de los 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 uso y pruebo la UA reducida?

Para comenzar, revisa el código de tu sitio en busca de 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 obtener los datos que esperas del usuario-agente. Existen tres formas de realizar pruebas, cada una de las cuales aumenta en complejidad.

La disponibilidad escalada para la reducción de usuario-agente significa que la cadena de UA completamente reducida se envía a todos los dispositivos Chrome. La reducción comenzó con una versión menor 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 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 versión nueva y probarla en paralelo.

Compatibilidad con sugerencias del cliente y sugerencias críticas

Se muestran tres sugerencias de cliente predeterminadas al servidor, incluido el nombre y la versión principal del navegador, un valor booleano que indica si el navegador está 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, puede haber ocasiones en las que necesites recuperar información fundamental para que tu sitio se 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 de 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 secuencias de Client Hints con sugerencias críticas
Cuando el servidor solicite una sugerencia crítica, el cliente volverá a intentar enviar la primera solicitud de la página web con la sugerencia crítica. En este ejemplo, se solicita la sugerencia para Sec-CH-UA-Model 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 protocolo de enlace y proporcionar un modelo para las sugerencias del cliente. Estos pasos pueden ser complejos y requieren conocimientos avanzados.

Los marcos HTTP/2 y HTTP/3 de ACCEPT_CH, combinados con la extensión ALPS de TLS, son una optimización a nivel de la conexión para entregar las preferencias de sugerencia del cliente del servidor a tiempo para la primera solicitud HTTP. Estos requieren una configuración compleja y te recomendamos que solo los uses para información realmente importante.

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

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

Preguntas frecuentes

¿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 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?

Los UA-CH de alta entropía en los encabezados de solicitud están restringidos 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 obtenerse a través de 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 cadena de usuario-agente no afecta directamente la cadena de usuario-agente que un bot elige enviar.

Los bots pueden actualizar sus propias cadenas para reflejar la información reducida que envía Chrome, pero esa es 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 seguir haciéndolo.

Si tienes alguna inquietud con bots específicos, te recomendamos que te comuniques 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