Tra le novità in tema di compatibilità introdotte con Internet Explorer 11, una delle principali riguarda la modifica della stringa dello User Agent. Si tratta di quella stringa e di quell'insieme di parametri con cui è possibile, su un server, identificare il browser dell'utente e attuare la strategia del cosiddetto browser sniffing per servire versioni del sito o dell'applicazione ad hoc per uno specifico software di navigazione.
La nuova stringa dello User Agent di Internet Explorer 11
La nuova stringa dello User Agent di Internet Explorer su Windows 8.1 si presenta così:
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
Questa invece la configurazione su Windows 7:
Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
Nella stringa, il parametro Windows NT
seguito dal numero di versione identifica il sistema operativo, il parametro Trident/7.0
fa riferimento alla versione del motore di rendering del browser, il parametro rv.11.0
alla versione del browser, mentre l'ultimo parametro, like Gecko
, istruisce il server sul fatto di trattare il browser come se si trattasse di un programma di navigazione basato su Gecko, il rendering engine alla base di Firefox.
Per capire a pieno la novità sarà sufficiente confrontare la nuova stringa con quella di Internet Explorer 10:
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)
Come si nota, nella stringa di IE11 non compaiono più i parametri compatible
e MSIE
. Proprio quest'ultimo parametro era quello a cui si sono appoggiati negli anni gli sviluppatori per identificare il browser di Microsoft e servirgli versioni del codice (CSS, Javascript, etc.) ad hoc ma non sempre aderenti a quegli standard condivisi che ormai da tempo sono al centro della strategia di Microsoft per il Web.
Cosa comporta questa modifica? E soprattutto, a chi può interessare?
Niente più codice 'legacy', hack e workaround
La prima conseguenza è che quando si visualizza un sito o un'applicazione web con IE11 l'utente riceverà la stessa versione, lo stesso codice, serviti a chi naviga con Firefox (o comunque con browser con un supporto pieno e avanzato degli standard), e questo anche se in precedenza si servivano versioni specifiche attraverso l'identificazione del browser.
È come se il browser si presentasse al server dicendo: "Sono come Firefox o Chrome, sono in grado di gestire al meglio il codice Javascript e CSS, per cui invia a chi mi usa la versione standard del sito".
Di fatto, chi usa Internet Explorer 11 non riceverà più codice legacy e non standard ottimizzato in qualunque modo per il programma di Microsoft, anche sotto forma di hack e workaround. Non si correrà il rischio, usando un programma che supporta pienamente gli standard, di vedersi fornita una versione del sito che potrebbe risultare addirittura problematica dal momento che quegli hack non sono più supportati e validi.
In sintesi, come specificato da Microsoft: questo cambiamento previene il problema che IE11 possa essere erroneamente identificato come una delle versioni precedenti.
No 'browser sniffing' ma 'feature detection'
Questa considerazione ci porta a rispondere anche alla seconda domanda. Pur non potendo valutare a pieno, ora, le conseguenze caso per caso, sito per sito, di questa modifica, una cosa appare certa: con questa scelta Microsoft sembra voler dare il colpo di grazia definitivo alla strategia del browser sniffing a favore di quella da essa stessa patrocinata della feature detection, quella per cui lo sviluppatore non identifica il browser ma le funzionalità che supporta per ottimizzare il codice.
Il messaggio è chiaro per gli sviluppatori che in passato hanno usato il browser sniffing per servire codice specifico per Internet Explorer: questa pratica non è più efficace, non va più seguita.
E se fosse comunque necessario, in condizioni particolarissime, identifcare Internet Explorer 11 a partire dalla stringa dello User Agent? In quel caso il suggerimento è di sfruttare il parametro relativo al motore di rendering, ovvero Trident/7.0
.