Décryptons un peu le User-Agent

closeCet article a été publié il y a 7 ans 9 mois 21 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

Vous êtes vous déjà demandé comment font les sites Web pour savoir si vous êtes sur un pc de bureau, un mobile, si vous êtes un Windowsien, un Vegan, un Androïde ou un Manchot ? Le User Agent pardi !

Avant tout une identification

Pour parler un peu protocole HTTP, le User Agent est un header envoyé avec chaque requête qui identifie le client (vous), ou plus précisément le navigateur, auprès du site Web visité.

En langage humain, c’est une chaîne de caractères envoyé avec chaque requête qui contient des informations sur votre appareil : système d’exploitation, version du navigateur, et malheureusement comme on le verra plus loin, à peu près n’importe quoi. L’idée étant de savoir à peu près à quoi le serveur a affaire. On verra juste après ce que dit notre navigateur sur notre compte.

Des usages multiples

Ça peut paraître flippant d’être identifié de la sorte, mais ce système est utile à plus d’un titre. Pour un site Web qui propose un logiciel à télécharger, il peut proposer uniquement la version pour l’appareil que vous utilisez. Pour les marchands qui proposent un site dédié pour les appareils mobiles (versus ceux qui font du responsive), cela permet de router correctement les visiteurs vers une version adaptée à la taille de l’écran et au maniement tactile.

Pour ceux qui proposent des extensions de navigateur, proposer directement la bonne version permet naturellement de gagner du temps, et d’éviter aussi d’installer des choses qui ne sont pas supportées.

Une autre possibilité est aussi de vérifier, quand c’est indiqué, ou en se basant sur le numéro de version, le support de certaines technologies. Pour ceux qui proposent un service reposant, au hasard, sur le bon support des vidéos H264, une ancienne ESR de Firefox se verra proposer l’utilisation de Flash, là où les plus récents utiliseront le « HTML5 » natif.

De manière plus générique vous pouvez afficher un message quand vous pensez que le navigateur risque de ne pas supporter toutes les technologies que vous utilisez sur votre site. Ou mieux, ça permet de classer les visiteurs en fonctions de certains critères (navigateurs, OS, entre autres) dans Piwik 😛

Un en-tête bordélique

C’est le moins qu’on puisse dire, puisqu’en dehors du navigateur et de sa version, du système d’exploitation et de sa version, on peut en retrouver des conneries. Voici quelques user-agent que j’ai pu rencontrer dans les logs nginx :

Le premier est mon préféré, il met tellement de merdes qu’on a du mal à s’y retrouver. On voit Mozilla, AppleWebkit, KHTML, Gecko, Chrome, Safari. Déjà, c’est pas Safari, c’est clair, on est sous Linux (c’est marqué entre parenthèses), Gecko est le moteur de rendu de Firefox, mais les autres exemples nous indiquent clairement la version de Firefox quand c’est réellement lui (Gecko/20100101 par exemple), donc non. Remarque valable pour le Mozilla/5.0 sur lequel je reviendrais juste après. On est donc obligé de croire que c’est Chrome 50 du coup. Mais je croyais que Chrome n’utilise plus Webkit, qui est chapeauté par Apple (c’est donc ça), mais Blink, un fork maison (qui est d’ailleurs au passage utilisé par Opera également maintenant).

Bordélique, j’avais prévenu. Les seules informations réellement fiables sur lesquelles se reposer sont les premières que l’on retrouve entre parenthèses, à savoir le système d’exploitation et l’architecture matérielle quand elle est disponible. Les exemples un peu étranges, les bots ainsi que Leed, sont là pour confirmer qu’au final on met ce qu’on veut dans cette chaîne de caractères.

On a donc quoi au final dans ces exemples ? Dans l’ordre :

  • Un Chrome 50 sous Linux (pas d’identité précise sur la distribution)
  • Le robot d’indexation du moteur de recherche Bing
  • Un agrégateur de flux RSS, Leed, que j’ai utilisé pendant quelques temps
  • Un Chrome 48 sous Mac OS X 10.7.5
  • Un Firefox 36 sous Windows 7 64bit (oui, NT 6.1 c’est Windows 7, cherchez pas, c’est long à expliquer)
  • Le robot d’indexation du moteur de recherche Google
  • Un Firefox 44 sous Ubuntu 32 bit
  • Internet Explorer 11 sur Windows 7 64bit (Trident 7 c’est IE 11, tout va bien dans les numéros de version…)
  • Un Ovni, Opera Mini 14 sous Android (qui, contrairement à la version de bureau basée sur Chromium, utilise encore le moteur maison Presto 12).

Mais pourquoi tout le monde ou presque affiche Mozilla/5.0 au début ?

C’est un héritage d’un temps où les navigateurs en lice partaient un peu dans tous les sens, parfois dans le même, mais les développeurs de sites web n’avaient pas forcément les moyens de valider, ou préféraient carrément envoyer les visiteurs sur les roses. Les navigateurs ont donc tendance à « mentir » un peu pour annoncer un support de technologies de manière détournée, en se « faisant passer » pour un autre. Aujourd’hui, c’est plus pour marquer un niveau de technologie, mais c’est marrant quand Firefox, le fleuron de chez Mozilla, n’est plus le navigateur le plus utilisé de la planète (il ne l’a jamais été d’ailleurs, sauf si l’on exclut Internet Explorer de l’équation). Il y a un chapitre très bien écrit sur Wikipedia sur les différentes « phases » de bordélisme que le User-Agent a connu au cours des vingt-cinq années d’existence du Web.

Le User Agent n’est qu’une donnée parmi d’autres

Quand un site Web ou un gros intrus dans votre vie privée tel Facebook veut vous traquer, le User-Agent n’est qu’un moyen pour vous identifier, parmi d’autres données récoltées spécifiquement (à l’aide de cookies) et aussi celles que le navigateur donne de lui-même (remember, je sais que la moitié de mes visiteurs enregistrés par Piwik utilise un écran Full HD).

Par exemple, le navigateur envoie la résolution de l’écran, parfois jusqu’à la marque et le modèle de l’appareil (pas directement mais les informations sont tellement précises et nombreuses qu’on le devine facilement), et la page/le site dont vous venez. C’est comme ça que je sais si vous venez d’un moteur de recherche (qui parfois transmet même le terme de recherche et la position du résultat), de votre lecteur de flux RSS, de Twitter, etc.

Et même si le profilage avancé fait par les publicistes et les réseaux sociaux fait peur, c’est juste un détournement de l’utilisation de ces informations à la base simplement techniques qui sont très pratiques (les données sur les moteurs de recherche sont utiles quand on s’intéresse de près à son référencement, sa visibilité).

Le User Agent est inoffensif, et on peut le changer

Il n’est pas méchant, il rend service la plupart du temps même s’il est bordélique (grâce à lui on peut détecter les OS, les langues et l’architecture d’un visiteur pour lui proposer la meilleure expérience possible), et cerise sur le gâteau, vous pouvez même le rendre moins bavard si vous pensez que c’est nécessaire.

Par contre, ça demande généralement de passer par une extension comme User-Agent Switcher sur Firefox. Il existe un module équivalent sur Chrome, pour Internet Explorer (et probablement Edge), c’est faisable aussi mais plus compliqué puisqu’il faut passer par les outils de développement. Certains furieux font ça carrément en base de registres, mais c’est moins dynamique…

Bref, amusez-vous à mentir si vous pensez que ça vous protègera 😛