Tutti i browser mentono: la verità nascosta dietro lo user-agent

Dalla nascita con Mosaic fino alla sua obsolescenza moderna, lo user-agent racconta una storia affascinante di compatibilità forzata, inganni tra browser e la lenta evoluzione verso standard più trasparenti.
Tutti i browser mentono: la verità nascosta dietro lo user-agent

Ogni volta che apriamo un sito Web, il browser invia una piccola dichiarazione d’identità: lo user-agent. Questa stringa testuale, oggi in gran parte ignorata dagli utenti, ha attraversato decenni di guerre tra browser, compromessi tecnici e standard confusi. Nata con uno scopo preciso — identificare il software che effettua una richiesta HTTP — si è trasformata, nel corso degli anni, in una babele di riferimenti incrociati, stratagemmi e mascheramenti di vario genere.

Ripercorriamo la storia, poco conosciuta, di questo frammento di testo a cui oggi pochi pongono attenzione, ma che ogni sito/server interpreta. Per dirne una, lo user-agent è memorizzato lato server nei registri che conservano la lista delle connessioni effettuate e delle risorse richieste (siano esse pagine, immagini, elementi multimediali,…).

Le origini: Mosaic e la nascita dell’identità del browser Web

Dopo il lavoro svolto da Tim Berners-Lee che il Web lo inventò nel 1990, NCSA Mosaic (1992-1993) fu il primo browser a larga diffusione. Sviluppato dal National Center for Supercomputing Applications, si identificava in modo semplice e diretto come NCSA_Mosaic/2.0. Tra parentesi era poi riportata la piattaforma in cui era in esecuzione: ad esempio Windows, Macintosh, SunOS, IRIX, HP-UX o altri sistemi Unix-like.

Mosaic fu rivoluzionario: poteva visualizzare immagini e testo nello stesso documento. Ma il suo nome non rimase unico per molto.

Dalle ceneri del progetto Mosaic nacque Mozilla, abbreviazione per “Mosaic Killer“, che poi assunse il nome pubblico di Netscape. Il browser si manifestava, su Windows, con la stringa seguente:

Mozilla/1.0 (Win3.1)

Netscape introdusse il supporto per i frame, i cosiddetti riquadri utilizzabili per inserire un’altra pagina HTML (elemento non previsto in Mosaic). Da qui l’idea di servire pagine diverse a browser diversi in base al contenuto della stringa user-agent.

Microsoft e la guerra dei browser

Internet Explorer, creato da Microsoft per contrastare Netscape, supportava i frame. Ma i webmaster non lo sapevano ancora, e quindi non gli inviavano pagine con frame. Così, per “bypassare” il problema, Microsoft decise che Internet Explorer si sarebbe identificato come segue:

Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)

Il browser mentiva deliberatamente per ricevere i contenuti riservati a Netscape. Nel corso degli anni, il trend degenerò. Ogni browser si identificava come Mozilla-compatible, anche se non lo era. Quando Netscape perse la guerra, risorse dalle sue ceneri con il nome Mozilla Suite e poi Firefox, ma il nome “Mozilla” rimase nello user-agent:

Mozilla/5.0 (...) Gecko/... Firefox/...

Con l’arrivo di motori di rendering alternativi come KHTML (usato da Konqueror), si aggiunsero nuove clausole (ad esempio KHTML, like Gecko) poi giunsero altre opzioni con Safari e WebKit, fork di KHTML, che voleva anch’esso le pagine disegnate per Gecko. Ecco quindi che apparve un user-agent ancora più complesso:

Mozilla/5.0 (...) AppleWebKit/... (KHTML, like Gecko) Safari/...

Opera adottò una strategia bizzarra: permetteva all’utente di scegliere quale browser fingere di essere, per eludere eventuali problemi derivanti da meccanismi di controllo dello user-agent mal scritti.

Chrome e la sindrome dell’identità multipla

Anche Google Chrome, costruito su WebKit (poi su Blink), decise di seguire il filone Safari/WebKit/Gecko e si presenta così (ancora oggi):

Mozilla/5.0 (...) AppleWebKit/... (KHTML, like Gecko) Chrome/... Safari/...

Indipendentemente dal browser utilizzato, potete aprire la home page di Google Search per poi digitare my user agent: leggerete immediatamente lo user agent col quale vi presentate, di norma, a qualunque sito Web visitato.

Verifica user agent browser Web

Ogni browser moderno contiene riferimenti a browser passati o concorrenti per compatibilità, al punto che lo user-agent odierno è quasi privo di significato semantico reale. È una stringa ormai piena zeppa di stratagemmi, richiami a motori di rendering defunti e mascheramenti tecnici. Tant’è vero che già nel 2022 Google proclamava la fine dello user-agent.

La soluzione: l’approccio moderno

Nel contesto attuale, si sta cercando di eliminare progressivamente i controlli lato user-agent in favore di API come Navigator.userAgentData (User-Agent Client Hints), che forniscono dati in modo controllato e rispettoso della privacy.

Google, Mozilla, Apple e altri stanno collaborando per ridurre l’utilizzo dello user-agent tradizionale. L’idea è fornire solo le informazioni essenziali e permettere all’utente di avere un maggiore controllo.

Curioso il fatto che la pagina di download di Windows 10 effettui ancora un controllo della stringa user-agent: aprendola da Windows, non consente di scaricare l’immagine del sistema operativo Microsoft. Da qualunque altra piattaforma (macOS, Linux, Android, iOS,…) sì. Basta infatti forzare un cambio dello user-agent (tasto F12, MAIUSC+CTRL+M in Chrome), ricaricare la pagina, per vedere apparire il pulsante di download del file ISO di Windows 10.

Conclusioni

Quella dello user-agent è una parabola perfetta della storia del Web: una soluzione nata per chiarezza, poi degenerata in caos e infine oggetto di riforma. È anche una lezione sulla fragilità degli standard quando i player principali iniziano a “barare” per convenienza. Oggi sappiamo che la compatibilità vera non si costruisce con le maschere, ma con l’aderenza agli standard e il testing multipiattaforma.

Il futuro del Web sarà più sobrio? Forse. Ma la stringa Mozilla/5.0 (...), con Mozilla che non ha direttamente a che vedere con la fondazione che si occupa dello sviluppo di Firefox, continuerà a vivere nei log dei server come un fossile digitale, testimonianza di un’era in cui ogni browser voleva qualsiasi cosa e non soltanto se stesso.

Ti consigliamo anche

Link copiato negli appunti