Preguntas sobre el user agent
Por qué todos los navegadores dicen Mozilla, qué significa Edg y por qué tu iPad dice ser un Mac.
¿Cuál es mi user agent?+
Es la línea que tu navegador pone en la cabecera User-Agent de cada petición que hace, para describirse ante el servidor. Pulsa el botón del espacio de trabajo de arriba y esta página la lee de navigator.userAgent y luego la descompone. No se sube nada para hacerlo; la lectura ocurre en la pestaña. Un user agent típico es Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36, y de esas seis piezas solo dos, el comentario de plataforma y la versión de Chrome, dicen algo cierto. El resto es sedimento de compatibilidad que ningún navegador se atreve a quitar.
¿Por qué todos los navegadores siguen diciendo Mozilla/5.0?+
Por una decisión de 1994 y treinta años en los que nadie ha podido deshacerla. El nombre en clave interno de Netscape era Mozilla, y enviaba Mozilla/2.0 como identidad. Los servidores empezaron a comprobarlo antes de servir frames, que Netscape admitía y la competencia no. Cuando Internet Explorer 2 incorporó frames no conseguía la página buena, así que envió Mozilla/2.0 (compatible; MSIE 2.0) y recibió la correcta. Desde entonces, cada navegador ha copiado a quien fuera ganando: Safari añadió Mozilla y KHTML, Chrome añadió Mozilla y Safari, Edge añadió Mozilla, Chrome y Safari. Hoy el prefijo solo significa que quien lo envía es un navegador web, y el 5.0 no se ha movido desde 1998. Quien lo quita se encuentra con algún servidor en alguna parte que le sirve una página de 1999.
¿Por qué Chrome dice ser Safari?+
Por la misma razón por la que Internet Explorer decía ser Netscape. Cuando Chrome se lanzó en 2008 usaba WebKit, el motor de Safari, y gran parte del código de detección en el servidor se había escrito como si WebKit significara Safari. Enviar los tokens AppleWebKit y Safari le daba a Chrome las mismas páginas que recibía Safari, así que los envió. En 2013 Chromium creó Blink como bifurcación de WebKit y siguió enviando ambos tokens de todos modos, porque para entonces quitarlos habría roto sitios. Así que AppleWebKit/537.36 es un número de compilación del momento de la bifurcación y ninguna versión de Chrome en más de una década ha contenido ese código, mientras que Safari/537.36 no corresponde a ningún Safari que haya existido nunca. La consecuencia práctica es que un analizador debe comprobar Chrome antes que Safari, o contará a cada usuario de Chrome como usuario de Safari.
¿Qué significa Edg y por qué no Edge?+
Edg es Microsoft Edge basado en Chromium, es decir, todos los Edge desde 2020. Se escribe con tres letras a propósito. El Edge antiguo enviaba Edge/18.19041, y mucho código de detección de funciones se había escrito para buscar la cadena Edge y tratarla como el navegador EdgeHTML, con sus propios fallos. Lanzar un navegador Chromium que coincidiera con esas comprobaciones le habría aplicado soluciones para EdgeHTML que no necesitaba, así que Microsoft eligió un token con el que nada coincidía todavía. Edge en Android es EdgA y Edge en iOS es EdgiOS, un hueco habitual en los analizadores escritos a mano. En los tres casos el token va después de un token completo de Chrome, así que un analizador que lee de izquierda a derecha y se detiene en el primer navegador que reconoce identifica Edge como Chrome.
¿Por qué mi iPad dice Macintosh?+
Porque Apple decidió en iPadOS 13 que un iPad debía recibir los sitios web de escritorio por defecto, y la forma de conseguirlo era enviar la cadena de escritorio. Safari en iPad envía ahora Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) sin ningún token iPad, idéntica byte a byte a la de Safari en un Mac. No hay forma de distinguir ambos a partir de la cadena, y es intencionado. Si necesitas saberlo, la pista está en la página y no en la cabecera: navigator.maxTouchPoints devuelve un número mayor que cero en un iPad que dice ser un Mac, y cero en casi todos los Mac reales. El token iPad solo reaparece cuando el usuario ha elegido Solicitar sitio web móvil para ese sitio.
¿Puedo fiarme de lo que dice un user agent?+
No, y no es una advertencia: es la propiedad que define el formato. La cadena la elige el cliente. Cambiarla requiere un campo en el panel de condiciones de red de las herramientas para desarrolladores de cualquier navegador, una opción -A en curl o una línea en cualquier biblioteca HTTP. Nada la firma, nada la verifica y nada en la cabecera viaja con ninguna garantía. Sirve para analítica, donde una pequeña proporción de datos absurdos no cambia la forma de los datos, y para elegir un enlace de descarga, donde lo peor que puede pasar es el instalador equivocado. Nunca es aceptable como control de acceso, comprobación de licencia, defensa contra bots ni ninguna otra decisión de seguridad. Si necesitas saber que una petición es de verdad de Googlebot, Google publica rangos de DNS inverso y una lista JSON de sus direcciones precisamente por eso, y verificar contra ellos es la única forma honesta de tratar esa afirmación.
¿Qué son los User-Agent Client Hints?+
Son el reemplazo de todo el formato. En lugar de una sola cadena que lo lleva todo, lo quiera el sitio o no, el navegador envía tres campos de baja entropía en cada petición (la lista de marcas, si es móvil y el nombre de la plataforma) y se guarda todo lo demás hasta que un sitio lo pide por su nombre mediante la cabecera de respuesta Accept-CH o mediante navigator.userAgentData.getHighEntropyValues en JavaScript. Los valores de alta entropía son los útiles: la versión completa del navegador, la versión de la plataforma, la arquitectura, el número de bits y el modelo del dispositivo. Hay dos detalles que conviene saber. La lista de marcas incluye a propósito una marca inventada cuyo nombre cambia en cada versión, para que el código tenga que analizar la lista correctamente en lugar de buscar un único nombre fijo, que es justo el error que hizo imposible arreglar la cadena antigua. Y el soporte no es universal: los navegadores Chromium lo implementan, mientras que Safari y Firefox se han negado, y por eso la cadena antigua sigue siendo lo que envían todos los navegadores.
¿Qué es la reducción del user agent y qué ha eliminado ya?+
Es el programa por fases de Google, prácticamente completado desde Chrome 110 en 2023, para congelar las partes de la cadena que la convertían en una superficie de rastreo por huella digital. Chrome indica ahora sus números menor, de compilación y de parche como 0.0.0, así que la versión completa se lee 131.0.0.0 y solo el número principal es real. En escritorio, la versión de la plataforma está fijada en un valor constante. En Android, todos los dispositivos indican Android 10 y un modelo K, sea cual sea en realidad. Apple llegó antes y por otro camino: macOS indica 10.15.7 desde Big Sur porque mucho código de detección comparaba la versión numéricamente y fallaba con 11, y la palabra Intel se sigue enviando en Apple Silicon. El efecto es que la cadena es ahora una señal mucho más débil de lo que suele suponer el código que la lee, y cualquier cosa que necesite los valores reales tiene que pedirlos mediante los Client Hints.
¿Cómo cambio o falsifico mi user agent?+
En Chrome y Edge, abre las herramientas para desarrolladores, usa el menú de tres puntos para mostrar Más herramientas y luego Condiciones de red, desmarca Usar el valor predeterminado del navegador y elige o escribe una cadena. Firefox expone general.useragent.override en about:config. Safari tiene un menú Desarrollo con un submenú Agente de usuario. En la línea de comandos es curl -A en curl y --user-agent en wget, y cada biblioteca HTTP tiene una opción equivalente de una línea. Los usos legítimos son reales: probar que tu propio sitio sirve lo correcto a un navegador antiguo, reproducir un fallo que solo ve un cliente concreto y comprobar qué recibe un rastreador. Lo importante es lo inverso. Si cambiarlo es así de fácil para ti, es igual de fácil para todos los demás, así que ninguna comprobación que escribas en el servidor puede suponer que la cadena es honesta. Falsificarlo para saltarse un muro de pago o un límite de peticiones es un problema de términos de servicio más que técnico, y además suele fallar, porque los sistemas serios dejaron de fiarse de la cabecera hace años.
Chrome en mi iPhone aparece como CriOS. ¿Es Chrome de verdad?+
Es de verdad la interfaz de Chrome, su sincronización y su barra de direcciones, pero no es el motor de Chrome. Apple exige que todos los navegadores de iOS y iPadOS rendericen con el WebKit del sistema, así que Chrome para iOS, Firefox para iOS, Edge para iOS y Opera para iOS son todos Safari por debajo con distintas capas encima. Los tokens son CriOS, FxiOS, EdgiOS y OPiOS respectivamente, y cada uno va en una cadena que también lleva AppleWebKit y un número de compilación de Safari, que en este caso son auténticos y no decorativos. La consecuencia práctica para las pruebas es lo útil: un fallo de renderizado detectado en Chrome en un iPhone es un fallo de WebKit, se reproducirá en Safari en el mismo dispositivo y no se reproducirá en Chrome en ninguna otra plataforma. La Ley de Mercados Digitales de la Unión Europea ha empezado a flexibilizar esto, pero fuera de ese contexto la regla sigue vigente.