Migración de User-Agent Reduction a Client Hints
Una migración basada en estándares desde el análisis frágil de User-Agent hacia User-Agent Client Hints, con límites de privacidad y compatibilidad.
BotBrowser Team
Quieres la documentación estructurada de Plataforma?
Este artículo forma parte de la biblioteca editorial. Para pasos de configuración, material de referencia y actualizaciones continuas, entra en la sección de docs.
La reducción de User-Agent es un cambio de compatibilidad, no una razón para inventar una huella nueva. Un sitio debe leer la señal pública mínima que necesita, pedir más datos solo con un propósito claro y conservar un mecanismo de reserva probado.
BotBrowser puede ejecutar una versión y un perfil autorizados para observar estas señales en un contexto controlado; no puede obligar al sitio a aceptar Client Hints, conceder permisos ni garantizar un resultado entre navegadores.
TL;DR
Chrome congela o generaliza partes de la cadena User-Agent. UA-CH traslada algunos detalles a cabeceras estructuradas y a navigator.userAgentData; los valores de alta entropía siguen sujetos a permisos y políticas. Migra inventariando cada analizador, priorizando la detección de capacidades, enviando Accept-CH solo cuando sea necesario y probando el camino antiguo y el nuevo. BotBrowser puede ofrecer contextos controlados y autorizados para la comparación, pero no garantiza la interpretación de un sitio ni un resultado universal entre navegadores.
Contenido
- Qué cambió
- Secuencia de migración
- Límites de privacidad y compatibilidad
- Límite de capacidad de BotBrowser
- Conclusión práctica
Qué cambió
La cadena antigua aparece en la cabecera User-Agent y en navigator.userAgent. La reducción elimina o congela detalles para reducir la identificación pasiva. UA-CH ofrece señales estructuradas de baja entropía como Sec-CH-UA, Sec-CH-UA-Mobile y Sec-CH-UA-Platform, reflejadas por navigator.userAgentData.brands, mobile y platform.
Valores como platformVersion, architecture, bitness, model y fullVersionList tienen alta entropía. El servidor puede pedir campos concretos con Accept-CH y la página puede pedir sus equivalentes con getHighEntropyValues(). El transporte seguro, las políticas, los permisos y la configuración del usuario pueden cambiar el resultado.
const lowEntropy = {
brands: navigator.userAgentData?.brands ?? [],
mobile: navigator.userAgentData?.mobile ?? null,
platform: navigator.userAgentData?.platform ?? 'unknown',
};
const detailed = navigator.userAgentData
? await navigator.userAgentData.getHighEntropyValues(['platformVersion', 'architecture'])
: null;
La ausencia de una API no demuestra un modelo concreto ni una solicitud automatizada: solo indica que la señal no está disponible.
Secuencia de migración
- Inventaria dependencias. Localiza parsers del servidor, campos analíticos, reglas CDN, comprobaciones de frameworks y pruebas que esperan un sistema o una versión menor completos en
User-Agent. - Define la decisión. Para capacidades usa detección de funciones o una API estándar. Si el servidor necesita una familia de plataforma, usa una pista de baja entropía y documenta el propósito.
- Mantén un mecanismo de reserva. Navegadores antiguos, ajustes de privacidad y clientes no Chromium pueden no enviar la pista. Usa un valor conservador; no infieras un dispositivo preciso por ausencia.
- Pide solo lo necesario. Envía
Accept-CHpara campos concretos, revisa la retención y evita guardar valores crudos si basta una categoría. - Prueba ambas superficies. Comprueba cabeceras y
navigator.userAgentData, y prueba el mecanismo de reserva con una página sintética. Revisa redirecciones y claves de caché porque las pistas pueden cambiar la representación elegida.
| Decisión | Evidencia preferida | Mecanismo de reserva seguro |
|---|---|---|
| Mostrar una función | Detección en tiempo de ejecución | Control alternativo accesible |
| Elegir un diseño general | Pista móvil de baja entropía y viewport | CSS responsive |
| Elegir una descarga | Elección explícita o capacidad | Paquete compatible general |
| Diagnosticar una regresión | Versión declarada y resultado de prueba | Pasos reproducibles |
Límites de privacidad y compatibilidad
Client Hints no autoriza a recopilar un inventario de identidad. Las solicitudes de alta entropía pueden aumentar la vinculación; asocia cada campo con un propósito visible, limita la retención y excluye cuentas, ubicaciones y datos de dispositivos no relacionados de los registros. Las entradas GREASE cambian intencionadamente: acepta marcas y órdenes desconocidos.
Trata UA-CH como mejora progresiva. Un proxy, una caché, un documento incrustado, una política o una implementación no Chromium puede cambiar las pistas. navigator.userAgentData no existe en todas partes y una promesa resuelta no demuestra que una acción de aplicación terminó. Separa observación del navegador, permiso, confirmación de aplicación y resultado del servicio.
Consulta consistencia de User-Agent personalizado y calidad de funciones del navegador para más contexto sobre estas fronteras.
Límite de capacidad de BotBrowser
BotBrowser puede proporcionar perfiles controlados y recorridos autorizados y repetibles para comparar User-Agent y UA-CH en versiones declaradas. Registra cabeceras, valores de página y Worker, supuestos del contexto, versión del fixture y resultado visible, siempre en una página de prueba propia.
BotBrowser no hace que un sitio acepte una pista, conceda permisos, elimine una política de origen ni certifica una cuenta o transacción de producción. Un contexto controlado tampoco justifica una huella completa. Combina la observación con la semántica de W3C/MDN y aserciones de la aplicación; indica versión, origen, política y mecanismo de reserva.
Parser tolerante y responsabilidades separadas. Las marcas GREASE son extensibles: acepta marcas desconocidas y cualquier orden, e ignora campos futuros. La ausencia del API no equivale a mobile: false; conserva un estado explícito de señal no disponible. El servidor decide con cabeceras antes de que se ejecute JavaScript, mientras la página comprueba capacidades. Si una respuesta depende de una pista, declara esa dependencia con Vary y prueba caché fría y caliente.
Fixture sintético, redirecciones y caché. Crea una página propia que muestre solo los campos revisados y un estado visible para disponible, ausente, denegado o retrasado. Ejecuta navegación inicial, redireccionada y repetida con caché caliente; comprueba Accept-CH, claves de caché y Vary para que una representación no se sirva a otro contexto. Usa texto sintético, sin cuentas ni endpoints de producción, y verifica que el control alternativo conserve lo escrito.
Workers, iframes y accesibilidad. Incluye una comprobación en un Worker y otra en un iframe cuando el producto los use: una modificación de la página principal no demuestra paridad entre contextos. El mecanismo alternativo debe tener etiqueta, teclado y mensaje de estado; mueve el foco tras una denegación o ausencia y descarta resultados tardíos después de una elección del usuario.
Observabilidad y retención. Conserva únicamente estados normalizados (hint-present, hint-denied, api-missing, fallback-used), versión declarada, clase de origen, revisión del fixture y próxima fecha. Define dueño y vencimiento para cada campo de alta entropía; no guardes dumps de navigator, fuentes, renderizador, cuentas, ubicación ni entrada cruda.
Despliegue, reversión y registro. Publica el parser detrás de una configuración reversible, compara decisiones nuevas y antiguas con solicitudes sintéticas y vuelve al mecanismo de reserva ante una pista ausente o malformada. El registro debe nombrar la decisión, señal mínima, especificación y MDN consultados, versiones, contextos, dueño del mecanismo de reserva y diferencia entre cabecera, página, Worker y confirmación de aplicación. Programa una revisión tras cada versión mayor, cambio de CDN o integración embebida.
Clientes no Chromium y antiguos. Firefox, Safari, vistas web integradas, herramientas de privacidad y versiones antiguas pueden enviar solo la cadena reducida o ninguna señal. El mecanismo de reserva es una decisión del producto, no una adivinanza por nombre de navegador: una descarga genérica, CSS responsive o elección explícita suele ser más segura que inferir modelos. Describe «pista no disponible» sin convertirlo en «dispositivo no compatible».
Comunicación y límites de los wrappers. Indica al soporte qué observación puede pedir: por ejemplo, que faltó Sec-CH-UA-Platform y se mostró el diseño adaptable. No pidas volcados completos, inventarios ni capturas de cuentas. Una opción de framework puede cambiar una cadena de una página, ocultar una excepción o diferir una llamada; no cambia automáticamente los encabezados, el alcance del Worker ni la política de origen. Mantén un fixture de navegador y un recorrido de usuario separados.
Lo que no resuelve y ejemplos. Esta migración no identifica todos los navegadores, no obliga al servidor a aceptar un encabezado, no hace que un permiso sea concedido ni prueba un sistema operativo concreto. Usa valores sintéticos y etiquetas de versión gruesas, nunca cabeceras de clientes reales; revisa ejemplos cuando cambie la cadena reducida o aparezca una pista nueva.
Propiedad y revisión. Asigna responsables distintos para parser del servidor, mecanismo de reserva de página y revisión de privacidad. Registra la transición esperada y la fecha de próxima comprobación; informa de límites («cabecera ausente, mecanismo responsive mostrado») en vez de culpar al navegador. Revisa el documento con ingeniería y privacidad, indicando propósito, señal mínima, dueño de retención y condición que dispara otra revisión.
Conclusión práctica
Empieza con la decisión del usuario, no con otro parser. Usa detección de capacidades, UA-CH de baja entropía para decisiones generales y alta entropía solo con una justificación concreta. Prueba ausencia, denegación, retraso y el mecanismo de reserva; conserva el trabajo del usuario y separa evidencia del navegador del éxito de la aplicación. Así reduces supuestos frágiles sin exceder lo que un contexto puede demostrar.
Fuentes
Artículos Relacionados
Lleva BotBrowser de la investigación a producción
Usa estas guías para entender el modelo y después avanzar hacia validación multiplataforma, contextos aislados y despliegue de navegador preparado para escalar.