Kategorien
Webentwicklung

User-Agent

Dein Browser sendet seinen User Agent an jede Webseite, mit der du dich verbindest. Wir haben schon einmal darüber geschrieben, wie du den User Agent deines Browsers ändern kannst – aber was genau ist ein User Agent überhaupt?

Ein User Agent ist ein „String“ – also eine Textzeile – die den Browser und das Betriebssystem gegenüber dem Webserver identifiziert. Das hört sich einfach an, aber User Agents sind im Laufe der Zeit ein einziges Durcheinander geworden.

Die Grundlagen
Wenn dein Browser eine Verbindung zu einer Webseite herstellt, fügt er ein User-Agent Feld in seinen HTTP Header ein. Der Inhalt des User-Agent-Feldes variiert von Browser zu Browser. Jeder Browser hat seinen eigenen, unverwechselbaren User-Agent. Im Wesentlichen ist ein User-Agent ein Weg für einen Browser, dem Webserver zu sagen „Hallo, ich bin Mozilla Firefox auf Windows“ oder „Hallo, ich bin Safari auf einem iPhone“.

Der Webserver kann diese Informationen nutzen, um verschiedene Webseiten für verschiedene Webbrowser und verschiedene Betriebssysteme auszuliefern. Zum Beispiel könnte eine Website mobile Seiten an mobile Browser, moderne Seiten an moderne Browser und eine „Bitte aktualisieren Sie Ihren Browser“-Nachricht an den Internet Explorer 6 senden.

Untersuchung der User Agents
Hier ist zum Beispiel der User Agent von Firefox auf Windows 7:

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0

Dieser User-Agent verrät dem Webserver so einiges: Das Betriebssystem ist Windows 7 (Codename Windows NT 6.1), es ist eine 64-Bit-Version von Windows (WOW64), und der Browser selbst ist Firefox 12.

Werfen wir nun einen Blick auf den User-Agent des Internet Explorer 9, der lautet:

Mozilla/5.0 (kompatibel; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

Der User Agent String identifiziert den Browser als IE 9 mit der Trident 5 Rendering Engine. Du könntest jedoch etwas Verwirrendes entdecken – der IE identifiziert sich als Mozilla.

Darauf kommen wir in einer Minute zurück. Lass uns zuerst auch den User Agent von Google Chrome untersuchen:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, wie Gecko) Chrome/19.0.1084.52 Safari/536.5

Die Handlung verdichtet sich: Chrome gibt vor, sowohl Mozilla als auch Safari zu sein. Um zu verstehen, warum das so ist, müssen wir uns die Geschichte der User Agents und Browser ansehen.

Das User Agent String Chaos
Mosaic war einer der ersten Browser. Sein User Agent String war NCSA_Mosaic/2.0. Später kam Mozilla (später umbenannt in Netscape), und sein User Agent war Mozilla/1.0. Mozilla war ein fortschrittlicherer Browser als Mosaic – vor allem unterstützte er Frames. Webserver überprüften, ob der User Agent das Wort Mozilla enthielt und schickten Seiten mit Frames an Mozilla-Browser. An andere Browser schickten die Webserver die alten Seiten ohne Frames.

Irgendwann kam Microsofts Internet Explorer und unterstützte ebenfalls Frames. Allerdings empfing der IE keine Webseiten mit Frames, weil die Webserver diese nur an Mozilla-Browser schickten. Um dieses Problem zu beheben, fügte Microsoft das Wort Mozilla zu ihrem User Agent hinzu und fügte zusätzliche Informationen hinzu (das Wort „kompatibel“ und einen Verweis auf den IE.) Webserver waren froh, das Wort Mozilla zu sehen und schickten dem IE die modernen Webseiten. Andere Browser, die später kamen, taten das Gleiche.

Schließlich suchten einige Server nach dem Wort Gecko – der Rendering Engine von Firefox – und servierten Gecko-Browsern andere Seiten als älteren Browsern. KHTML – ursprünglich für den Konquerer auf dem KDE-Desktop von Linux entwickelt – fügte die Worte „wie Gecko“ hinzu, damit sie auch die modernen Seiten, die für Gecko entworfen wurden, bekommen würden. WebKit basierte auf KHTML – als es entwickelt wurde, fügten sie das Wort WebKit hinzu und behielten die ursprüngliche „KHTML, wie Gecko“-Zeile aus Kompatibilitätsgründen bei. Auf diese Weise fügten die Browserentwickler im Laufe der Zeit immer wieder Wörter zu ihren User Agents hinzu.

Webserver kümmern sich nicht wirklich darum, wie der genaue User-Agent-String lautet – sie prüfen nur, ob er ein bestimmtes Wort enthält.

Verwendet
Webserver benutzen User Agents für eine Vielzahl von Zwecken, unter anderem:

Unterschiedliche Webseiten an unterschiedliche Webbrowser auszuliefern. Dies kann zum Guten genutzt werden – zum Beispiel, um einfachere Webseiten für ältere Browser zu liefern – oder zum Schlechten – zum Beispiel, um eine „Diese Webseite muss im Internet Explorer angezeigt werden“-Meldung anzuzeigen.
Unterschiedliche Inhalte für verschiedene Betriebssysteme anzeigen – zum Beispiel eine abgespeckte Seite auf mobilen Geräten.
Sammeln von Statistiken, die zeigen, welche Browser und Betriebssysteme von den Nutzern verwendet werden. Wenn du jemals Statistiken über den Marktanteil von Browsern gesehen hast, werden sie auf diese Weise gewonnen.
Web-Crawling-Bots nutzen ebenfalls User-Agents. Zum Beispiel identifiziert sich der Webcrawler von Google als:

Googlebot/2.1 (+http://www.google.com/bot.html)

Webserver können Bots eine besondere Behandlung zukommen lassen – zum Beispiel, indem sie sie durch die obligatorischen Registrierungsbildschirme lassen. (Ja, das bedeutet, dass du manchmal die Registrierungsbildschirme umgehen kannst, indem du deinen User-Agent auf Googlebot einstellst.)

Webserver können auch bestimmten Bots (oder allen Bots) Befehle erteilen, indem sie die robots.txt-Datei verwenden. Zum Beispiel kann ein Webserver einem bestimmten Bot sagen, dass er verschwinden soll, oder einem anderen Bot, dass er nur bestimmte Bereiche der Website indizieren soll. In der robots.txt Datei werden die Bots durch ihre User Agent Strings identifiziert.

Alle wichtigen Browser enthalten Möglichkeiten, eigene User Agents zu setzen, so dass du sehen kannst, was Webserver an verschiedene Browser senden. Wenn du zum Beispiel deinen Desktop-Browser auf den User-Agent-String eines mobilen Browsers einstellst, siehst du die mobilen Versionen von Webseiten auf deinem Desktop.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.