User-Agent-Kennung
Wenn ein Browser oder ein Such-Robot oder der Agent eines Proxy-Servers bei einem Web-Server mit einem Request Daten anfordert, schickt er im Header eine Zeichenkette mit, mit der er sich dem Web-Server gegenüber „namentlich vorstellt“. Diese Kennung wird User-Agent genannt. Sie enthält (mehr oder weniger zuverlässig) Hinweise auf Browsertyp, Version, Betriebssystem oder Gerätekategorie.
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Inhaltsverzeichnis
Was ist Browser-Sniffing?
Unter Browser-Sniffing versteht man den Versuch, diese User-Agent-Kennung auszuwerten, um den verwendeten Browser oder das Endgerät zu identifizieren und darauf basierend unterschiedliche Inhalte oder Verhaltensweisen auszuliefern. Typische Beispiele waren spezielle HTML-, CSS- oder JavaScript-Varianten für bestimmte Browser oder Versionsnummern.
Historisch geschah dies sowohl clientseitig (z. B. über JavaScript und das navigator-Objekt) als auch serverseitig:
- JavaScript wertete navigator.userAgent aus und entschied, welche Skriptteile ausgeführt wurden (sogenannte „Browserweichen“).
- Webanwendungen lasen den User-Agent-Header und lieferten je nach erkanntem Browser unterschiedliche Inhalte aus.
Stand heute
Die obsolete Eigenschaften navigator.appName und navigator.appCodeName sollen den Namen des Browsers und seinen Codename während seiner Entwicklung enthalten. NetScape wollte damit für Webseiten eine Möglichkeit schaffen, ihren Browser in JavaScript zu erkennen. Nachdem der Internet Explorer und andere Browser die neuen NetScape-Erfindungen nachgebaut hatten, wollten sie natürlich, dass die bestehenden Webseiten diese auch nutzten, und weil viele Entwickler keine Lust hatten, jeder Kapriole im Browserkrieg hinterherzuhecheln, geschah das nicht. Die „Lösung“ war, dass der Browser die Webseiten belügt: appName enthält immer "NetScape" und appCodeName immer "Mozilla", und weil man vermeiden will, dass uralte Webseiten kaputtgehen, bleiben uns diese beiden obsoleten Eigenschaften auf Dauer erhalten.[1][2]
In Windows Phone sollte der User-Agent ein iPhone vorspiegeln, damit für iOS und Android optimierte Seiten auch auf mobilen Windows-Geräten dargestellt wurden. Dies war nötig, da viele Programmierer sich alleine auf User-Agent-Abfragen anstelle einer feature detection verließen.[3]
Obwohl der Ansatz naheliegend erscheint, ist Browser-Sniffing aus mehreren Gründen unzuverlässig und deshalb zu vermeiden:
- User-Agent-Kennungen sind nicht verlässlich
Browser können ihre Kennung frei wählen oder absichtlich verfälschen. Viele geben sich aus Kompatibilitätsgründen als andere Browser aus. - Hoher Wartungsaufwand
Neue Browserversionen, Forks oder Geräteklassen erfordern ständig angepasste Erkennungslogik. - Falsche Annahmen
Ein erkannter Browsername sagt nichts darüber aus, ob die genutzte Version eine bestimmte Funktion tatsächlich unterstützt. - Datenschutz und Fingerprinting
Die gezielte Auswertung von Browsermerkmalen kann zur Wiedererkennung von Nutzern beitragen und wird daher von modernen Browsern bewusst eingeschränkt.
Moderne Techniken
Je nach benötigtem Feature gibt es mittlerweile bessere Techniken, um sein Vorhandensein zu erkennen.
- @supports

- Feature detection
Abfragen, ob ein Objekt existiert - Progressive enhancement
Zuerst grundsätzliche Funktion, dann Gestaltung und Dynamik
Weblinks
- ↑ Liste verschiedener Kennungen (developers.whatismybrowser.com)
- ↑ webaim.org: lustige Geschichte der User-Agent-Kennungen, englisch
Die Geschichte der User-Agent-Strings (deutsche Übersetzung von Alexander Stannigel) - ↑ Windows Phone 8.1 Update Will Feature IE 11 Improvements By Kurt MackieAugust 07, 2014