Un agente de usuario es una aplicación informática que funciona como cliente en un protocolo de red; el nombre se aplica generalmente para referirse a aquellas aplicaciones que acceden a la World Wide Web. Los agentes de usuario que se conectan a la Web pueden ser desde navegadores web hasta los web crawler de los buscadores, pasando por teléfonos móviles, lectores de pantalla y navegadores en Braille usados por personas con discapacidades.
Cuando un usuario accede a una página web, la aplicación generalmente envía una cadena de texto que identifica al agente de usuario ante el servidor. Este texto forma parte del pedido a través de HTTP, llevando como prefijo User-agent: o User-Agent: y generalmente incluye información como el nombre de la aplicación, la versión, el sistema operativo, y el idioma. Los bots, como los web crawlers, a veces incluyen también una URL o una dirección de correo electrónico para que el administrador del sitio web pueda contactarse con el operador del mismo.
Acabo de leer el artículo History of the browser user-agent string, en el que nos explican con un poco de gracia el origen del uso del user-agent y cómo se ha llegado a los user-agent que se emplean hoy en día que prácticamente no aportan ninguna información útil, porque todos los navegadores pretenden ser lo que no son.
La cadena user-agent se empleó al principio de la Web para distinguir los navegadores entre sí y ofrecer un contenido diferente a cada uno. Por ejemplo, "hace mucho tiempo, en una galaxia muy, muy lejana", había navegadores web con y sin soporte de marcos (frames). Algunos desarrolladores web creaban dos versiones de sus sitios web, una versión con marcos y otra sin marcos, que se enviaba al navegador en función de su cadena user-agent. Ahí empezó la mala costumbre de hacer un sitio web "optimizado para el navegador XYZ" y mucha gente olvidó que uno de los principios fundamentales de la Web es que debe ser una, lo que se conoce por One Web:
One Web means making, as far as is reasonable, the same information and services available to users irrespective of the device they are using.La página UserAgentString.com muestra y explica la cadena user-agent del navegador. Por ejemplo, cuando me conecto con Google Chrome 16, aparece:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7Resulta que Google Chrome está basado en Apple WebKit, por lo que dice que también es Safari/535.7, el navegador de Apple que también usa WebKit. Pero WebKit está basado a su vez en KHTML, que pretende ser compatible con Gecko, que es el motor de Mozilla... ¡Un lío!
Además, para liarlo un poco más, en la mayoría de los navegadores se puede cambiar la cadena user-agent fácilmente, tal como explican en Changing Browser User Agent Strings. Por tanto, tampoco te puedes fiar del valor que envía un navegador. Y además, constantemente aparecen nuevos navegadores y nuevas versiones de los navegadores.
Mi consejo: nunca realizar un desarrollo web en el que se detecte la cadena user-agent y se genere un contenido en función de su valor, es una pérdida de tiempo.