Lorsqu'un navigateur demande une page à un serveur web, il lui transmet son identité, sous forme d'un en-tête HTTP du doux nom d'User-Agent. Dans la seconde moitié des années 1990, la surenchère de nouvelles fonctionnalités entre les deux leaders du marché, Netscape Navigator et Internet Explorer, a conduit à de nombreuses incompatibilités. Certains auteurs de sites web ont alors adapté leurs contenus à tel ou tel navigateur, conduisant à un morcellement du web, que l'on a qualifié de balkanisation. L'adaptation de contenus était basée sur la détection du User-Agent. D'où des ruses successives des fabricants de navigateurs pour se faire passer pour leurs concurrents, et ainsi afficher les contenus qui ne leur avaient pas été spécifiquement adaptés.

Aujourd'hui, les jours les plus sombres de la balkanisation du web sont heureusement derrière nous. Cependant, les vieux réflexes existent toujours. Regardons par exemple le User-Agent du tout nouveau Google Chrome :

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)
   AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13

Que nous apprend cet identifiant sur l'histoire du web ?

  • Mozilla : en 1995, le leader incontesté des navigateurs était Netscape Navigator, nom de code Mozilla. Lorsqu'Internet Explorer est sorti, il a donc tout naturellement choisi de se faire passer pour son concurrent. Le numéro de version a évolué en parallèle jusqu'à Netscape 4, puis IE en est resté à 4. Mozilla 1.0 (issu du projet nouveau Netscape lancé en 1998), puis Firefox ainsi d'ailleurs que tous les navigateurs modernes, s'identifient comme Mozilla/5.0. Aujourd'hui, sauf exception, tous les User-Agent de navigateurs (hors robots) commencent par Mozilla.
  • Dans la parenthèse, les mentions Windows et en-US sont transparentes. Par contre, d'où vient ce U ? Il date d'une époque où les sociétés américaines devaient exporter des versions bridées des algorithmes de chiffrement. On avait donc des versions U pour USA, et I pour International. Ces restrictions ayant depuis été levées, il ne reste que des versions U.
  • AppleWebKit : c'est une chaîne d'identification envoyée par tous les navigateurs qui se basent sur le moteur WebKit d'Apple (développé au départ pour Safari). Chrome utilise WebKit.
  • KHTML : WebKit lui-même est basé sur le moteur KHTML de KDE. Comme KHTML s'identifiait en tant que tel, WebKit en a conservé la mention.
  • ... Mais le moteur de Mozilla, Gecko étant beaucoup plus répandu que KHTML, les concepteurs de Safari/WebKit ont fait figurer le terme Gecko... De quoi tromper les serveurs qui recherchent la chaîne Gecko dans le User-Agent... Notez tout de même la légère précaution : « like Gecko ».
  • On trouve ensuite la version de Chrome lui-même, ce qui est naturel.
  • ... Mais la chaîne se termine sur un numéro de version de Safari, le navigateur d'Apple ! Encore une fois, il s'agit de tromper les serveurs qui adapteraient leur contenu pour Safari, en se basant sur la détection du mot Safari dans le User-Agent.

Étonnant comme un simple identifiant peut être riche de références !

Mise à jour, 10 septembre 2008 : voir aussi le billet, écrit le même jour, History of the browser user-agent string. Hilarant...