viernes, 27 de enero de 2012

La cadena "user agent" o "agente de usuario"

Según la definición de agente de usuario en la Wikipedia:
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.7
Resulta 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.

3 comentarios:

Maria Rod. SHENDHA dijo...

Hola Sergio. Mira me sale en el ordenador cuando entro en blogger lo siguiente, a ver s me puedes ayudar:
Error: Possible problema whith your *.gwt.xml module file. The compile time user.agent value (gecko1_8) does not match the runtime user.agent value (ie10). Expect more errors.
Por favor me puedes ayudar y decrme que sgnfica y que puedo hacer?
Tengo varios blogs, y escribo en ellos, tengo discapacidad, y me sirve de ayuda para estar activa. No quiero perder los blogs.
Te agradecería respuesta.
Gracias por leer el comentario.
Un saludo.
Te he encontrado buscando ayuda por la red.

Sergio Luján Mora dijo...

No parece que sea un error preocupante... parece que has modificado la cadena useragent en tu navegador. Reinstala el navegador o usa otro distinto.

Un saludo.

Anónimo dijo...

Buenas

**** Nuevas versiones Firefox sin locale en el user agent ****

En anteriores versiones de Firefox si accedías a sitios web
indicadores de agente de usuario en la cadena resultante salía el valor
de general.useragent.locale pero en las últimas ya no. Podéis
comprobarlo p.e. en http://whatsmyuseragent.com/ . Hay alguna web como http://youruseragent.info/what-is-my-user-agent que muestra el valor de intl.accept_languages (en Accept-Language) pero no el de la preferencia del locale.

En http://support.mozilla.org/es/questions/942501 se confirma la observación: “Firefox no longer adds the locale to the user agent”.

¿A qué se debe este cambio?

——————

Supongo que ahora la oferta personalizada de contenidos según
situación geográfica por parte de los portales web que lo hagan se
deberá basar sólo en la IP del ordenador, teléfono inteligente, etc. a
no ser que se ofrezca y acepte la geolocalización descrita en http://www.mozilla.org/es-ES/firefox/geolocation/ . El dejar de usar el locale posiblemente se deba a la incorporación de esto último, ¿no?

——————-
——————-

Si se responde acá se ruega que se copie el texto, de forma libre, en http://www.elgrupoinformatico.com/nuevas-versiones-firefox-sin-locale-user-agent-t15606.html

Saludos