PROJET AUTOBLOG


Le Hollandais Volant

source: Le Hollandais Volant

⇐ retour index

L’histoire des User-Agents

dimanche 10 mars 2013 à 14:20
Et pourquoi tout ça est dû à cause de webmasters qui daignent n’en faire qu’à leur tête avec des détections de navigateur.
browsers.jpg C’est marrant quand on veut fabriquer quelque chose sur un sujet, on en apprend énormément sur le sujet lui-même. C’est un peu comme l’architecte qui doit non seulement être bon en math mais aussi en histoire, en géographie…

Par exemple, je veux faire un petit outil qui affiche à l’écran le nom et la version du navigateur et de l’OS du visiteur à partir de l’user-agent. Très simple pensais-je… Bah non !

L’user-agent, c’est une donnée qu’un navigateur envoie au site qu’il visite et contenant des informations comme son nom et sa version.
Par exemple, Firefox 19 sous Linux envoie ça :
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0
Internet Explorer 8 sous Windows XP envoie ça :
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)

Là où ça commence à être marrant c’est quand on regarde l’histoire de ces user-agent (UA): le premier navigateur graphique au monde (NCSA Mozaic, il y a plus de 20 ans) affichait ça (en sa version 2.0 sous Windows 3.1) :
NCSA_Mosaic/2.0 (Windows 3.1)
Puis vint Mozilla (Netscape en fait) pour le concurrencer :
Mozilla/1.0 (Win3.1)

C’était cool non : une information simple, uniforme et facile à lire.

Mais alors… Comment en est-on arrivé à des choses compliquées comme les UA de Firefox ou IE ?

Cette page, History of the browser user-agent string, écrite par Aaron Andersen explique de façon humoristique ce qui s’est passé : je me permet une traduction libre ici.


Au commencement (1992) il y avait le navigateur NCSA Mosaic. Mosaic s’identifiait comme NCSA_Mosaic/2.0 (Windows 3.1). Il affichait les images en plus du texte et tout le monde était très heureux.

Peu de temps après arriva un nouveau navigateur appelé « Mozilla », raccourcissement de « Mosaic Killer ». Mais Mosaic n’était pas du tout amusé et Mozilla a dû changer de nom pour « Netscape », et Netscape s’identifia comme Mozilla/1.0 (Win3.1) et tout le monde était à nouveau très heureux.
Mais Netscape supportait l’affichage de frames (cadres HTML), et les frames devinrent très populaire, mais Mosaic ne supportait pas les frames et donc naquit la pratique de la détection de l’user-agent, et les sites web envoyaient les frames à Mozilla et ne les envoyaient pas aux autres.

Et Netscape se dit « moquons nous un peu de Microsoft et faisons référence à Windows comme un "pilote pour matériel mal débuggé" ». Microsoft était furieux, et Microsoft conçu son propre navigateur qu’ils appelèrent Internet Explorer, en espérant qu’il deviendrait un « Netscape Killer ». Internet Explorer supportait les frames, mais il n’était pas Mozilla donc les sites ne lui donnait pas les frames.
Microsoft s’impatienta et ne voulu pas attendre que les webmasters mettent à jour leur site et du coup Internet Explorer, étant en fin de compte « compatible Mozilla », se fit passer pour Mozilla et s’identifia comme Mozilla/1.22 (compatible; MSIE 2.0; Windows 95), et Internet Explorer recevait bien les frames, et Microsoft était content, mais les webmasters assez confus.

Et Microsoft vendit IE avec Windows, et le rendit mieux que Netscape, et ce fut la guerre pour qui avait le meilleur navigateur. Et finalement, Netscape mourut et Microsoft était vraiment très heureux.

Mais Netscape ressuscita en tant que Mozilla, et Mozilla construit Gecko, et Mozilla s’identifia comme Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826 et Gecko était le moteur de rendu des pages, et Gecko était bon. Mozilla devint finalement Firefox et se nomma Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0 et Firefox était très bon. Et Gecko était repris par d’autres navigateurs qui se nommèrent par exemple Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2) Gecko/20040825 Camino/0.8.1 pour l’un ou Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.8) Gecko/20071008 SeaMonkey/1.0 l’autre. Et chacun d’eux prétendaient être compatibles Mozilla et tous tournaient sur Gecko.

Et Gecko était bon, et IE ne l’était pas et la détection de l’user-agent renaissait, et Gecko recevait le bon code et les autres navigateurs ne le recevaient pas. Mais les utilisateurs de Linux étaient bien tristes car ils avaient construit Konqueror, dont le moteur de rendu était KHTML, et qu’ils pensaient être aussi bon que Gecko mais n’était pas Gecko, et ne recevait donc pas les bonnes pages.
Konqueror déclara être « comme Gecko » puis pour avoir les bonnes pages, il s’identifia comme Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko) et il y avait beaucoup de confusion…

Puis Opera déclara « nous devrions laisser le choix à l’utilisateur concernant le navigateurs dont il doit prendre le nom ! » et Opera créa un menu de choix et Opera s’identifia comme Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.51 ou Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51 ou Opera/9.51 (Windows NT 5.1; U; en) selon le choix fait par l’utilisateur.

C’est alors qu’Apple construit Safari, et repris KHTML en ajoutant plein de bonnes choses, et repris finalement le projet tout entier et l’appela WebKit, mais voulurent quand même les pages écrites pour KHTML, et donc Safari se nommait Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5 et la confusion était encore plus grande.

Entre temps Microsoft avait très peur de Firefox et Internet Explorer revint devant et se nommait alors Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) et il affichait le bon code… Mais seulement si les Webmasters le décidaient…

Et enfin Google construit Chrome, et Chrome utilisait WebKit et il était comme Safari et voulait les pages destinées à Safari et donc s’identifia comme Safari. Donc Chrome utilisait Webkit, en prétendant être Safari, et WebKit prétendait être KHTML, ce dernier s’affichait être comme Gecko et tous les navigateurs se faisaient passer pour Mozilla… Chrome se nomma 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 et l’user-agent était devenu une gros foutoir pratiquement inutile, et tout le monde prétendait être tous les autres et la confusion était à son comble…


Voilà un peu l’histoire de quelque chose de simple devenant un véritable bordel impossible à gérer, et tout ça parce que d’un côté les navigateurs ne sont pas tous égaux et supportaient leurs propres série de fonctionnalités non standards, de l’autre les webmaster qui voulaient utiliser des choses proposés par un navigateur en particulier et entre les deux l’utilisateur qui la plupart du temps prenait le plus pourri des navigateurs…

Moi ça me fait bien rire, parce que c’est assez marrant mais aussi parce que c’est quand même assez vrai que certaines choses deviennent de plus en plus compliqués à cause de patchs et de reprises dans tous les sens.

Malheureusement ceci pose également beaucoup de problèmes : les sites qui ont encore des systèmes de détection du navigateur sont nombreux et continuent d’être créés. C’est mal : cette détection peut souvent être foireuse et elle oblige le webmaster à construire plusieurs version de son site, alors qu’une seule version pourrait suffire si le webmaster savait coder proprement et si le site web ne se devait pas d’avoir toutes les options dernier cri.

Je pense que cette histoire va m’aider pour construire quelque chose pour détecter les user-agents : il suffit finalement de faire un arbre et on voit comment optimiser le traitement des opérations. Et les moteurs de rendu sont en nombre limités, donc ça devrait aller. Du moins pour les grands navigateurs sur desktop, parce que après il y a encore Nokia, et tous les autres qui ont les leurs.

Oh, et Opera Mobile utilisera WebKit dans le futur. La version beta est déjà sortie sur Android. Voici son user-agent, juste pour rire :

Mozilla/5.0 (Linux; Android 2.3.6; YP-G1 Build/GINGERBREAD) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.123 Mobile Safari/537.22 OPR/14.0.1025.52315

MAJ du 27/03/13 : et ça continue : IE 11 pourra s’identifier comme Firefox avec un « like Gecko » ajouté à son user-agent. C’est magnifique.

image de Technovore