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

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

    1. 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
    2. 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"
      
  2. 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

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

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 para 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 una sugerencia de cliente con Accept-CH y otra como una 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 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

Más información