User-Agent-Strings: Browser-Fingerabdrücke lesen
Was dieser seltsame String dir über deine Besucher verrät und warum er oft irreführend ist.
Jede HTTP-Anfrage enthält einen User-Agent-Header. So etwas wie:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Das soll den Browser identifizieren. In der Praxis ist es ein historisches Durcheinander.
Warum jeder Browser lügt
Dieser Chrome-User-Agent erwähnt Mozilla, AppleWebKit, KHTML und Safari. Chrome ist keiner davon.
Hier ist warum: Websites haben früher User-Agents geprüft und verschiedenen Inhalt ausgeliefert. Neue Browser wurden blockiert, weil Seiten sie nicht erkannten.
Also fingen Browser an zu lügen. „Ich bin kompatibel mit Mozilla" wurde Standard. „Ich bin kompatibel mit AppleWebKit" wurde hinzugefügt. Jeder Browser behauptet, jeder andere Browser zu sein.
Was du tatsächlich lernen kannst
Trotz des Chaos enthalten User-Agents immer noch nützliche Informationen:
Browser-Name und -Version: Der tatsächliche Browser ist normalerweise am Ende. „Chrome/120" oder „Firefox/121".
Betriebssystem: „Windows NT 10.0" oder „Mac OS X 10_15_7" oder „Linux".
Gerätetyp: Mobile User-Agents enthalten Gerätenamen oder „Mobile".
Bot-Identifikation: Googlebot, Bingbot und andere Crawler identifizieren sich.
Häufige Erkennungs-Muster
Desktop-Chrome:
...Chrome/120.0.0.0 Safari/537.36
Mobile Chrome auf Android:
...Android 10; Pixel 4...Chrome/120.0.0.0 Mobile Safari/537.36
Safari auf iPhone:
...iPhone; CPU iPhone OS 17_0 like Mac OS X...Safari/605.1.15
Firefox:
...Firefox/121.0
Edge, Opera, Brave und andere sind Chrome-basiert und sehen Chrome ähnlich.
Warum Feature-Detection besser ist
User-Agent-Detection beantwortet „welcher Browser?" Feature-Detection beantwortet „kann dieser Browser X?"
// User-Agent-Detection (fragil)
if (navigator.userAgent.includes('Chrome')) {
// Chrome-Features annehmen
}
// Feature-Detection (robust)
if ('serviceWorker' in navigator) {
// Service-Worker verwenden
}
Browser ändern sich. User-Agent-Strings werden modifiziert. Feature-Detection funktioniert unabhängig davon.
Wann User-Agents immer noch wichtig sind
Analytics. Dein Publikum verstehen: Browser-Marktanteil, Mobile vs. Desktop, OS-Verteilung.
Bot-Erkennung. Crawler identifizieren und Server-Verhalten anpassen.
Gezieltes Testen. Von Nutzern gemeldete Probleme auf spezifischen Browsern reproduzieren.
Legacy-Support-Entscheidungen. Wenn 0,1% der Nutzer IE11 verwenden, hörst du vielleicht auf, es zu unterstützen.
Spoofing und Privatsphäre
User-Agents sind leicht zu fälschen. Privatsphäre-Extensions modifizieren sie. Einige Browser lassen Nutzer sie manuell ändern.
Verlasse dich nicht auf User-Agents für Sicherheit. Sie sind Hinweise, keine Authentifizierung.
Browser-Fingerprinting kombiniert User-Agent mit anderen Signalen (Bildschirmgröße, Schriften, Plugins) zum Tracking. Das ist kontrovers und wird zunehmend von Browsern blockiert.
Client Hints: Die moderne Alternative
User-Agent Client Hints sind ein neuerer Ansatz. Server fordern spezifische Informationen an:
Sec-CH-UA: "Chromium";v="120", "Google Chrome";v="120"
Sec-CH-UA-Platform: "Windows"
Sec-CH-UA-Mobile: ?0
Strukturiert, zuverlässig, privatsphäre-respektierend. Aber Akzeptanz wächst noch.
Parsing-Bibliotheken
Parse User-Agents nicht mit Regex. Die Grenzfälle werden dich besiegen.
Verwende etablierte Bibliotheken, die Muster-Datenbanken pflegen:
- ua-parser-js (JavaScript)
- user-agents (Python)
- DeviceDetector (PHP)
Diese handhaben das historische Durcheinander und aktualisieren, wenn neue Browser erscheinen.
User-Agents sind nützlich für Analytics und Diagnostik, aber unzuverlässig für Feature-Entscheidungen. Parse sie mit Bibliotheken, bevorzuge Feature-Detection für Funktionalität und denk daran, dass jeder Nutzer seinen User-Agent fälschen kann.