# User Agent

Ein User Agent (englisch user „Benutzer“, agent „Mittler, Stellvertreter, Beauftragter“) ist eine clientseitige Anwendung zur Nutzung eines Netzwerkdienstes. Der User Agent bildet dabei die Schnittstelle zum Benutzer, die Inhalte des Dienstes darstellt und Befehle des Benutzers entgegennimmt. Beispiele für User Agents sind Webbrowser, E-Mail-Programme, Newsreader oder IRC-Clients. Viele User Agents übertragen ihren Namen und andere Daten im Kopf (Header) einer Anfrage (Request) an einen Server als Zeichenkette (user agent string). Der Name des entsprechenden Headers im Hypertext Transfer Protocol (HTTP) lautet User-Agent.

## Webbrowser

Webbrowser verwenden zum Abruf von Webseiten das HTTP, normiert in Standard RFC 2616. Der Standard sieht einen Header namens „User-Agent“ zur Übertragung des Namens und der Version der Browsersoftware an den Webserver vor. Der Header ist optional, aber empfohlen, und wird von den allermeisten Webbrowsern und sonstiger Clientsoftware (zum Beispiel Webcrawlern) verwendet. Er wird bei jedem einzelnen Seitenabruf übertragen.
Als vorgesehenen Verwendungszweck des Headers gibt der Standard an:
* Statistische Erhebungen
* Fehlersuche
* Auslieferung von Inhalten, die für spezielle Clientsoftware maßgeschneidert ist.

### Aufbau des HTTP-User-Agent-String

Der User Agent String in HTTP enthält Namen, Version und Kommentar zu einer oder mehreren Komponenten des Clients. Diese haben jeweils folgenden Aufbau:
Name/Version (Kommentar)
Der Kommentar ist optional, sein Inhalt nicht weiter normiert. Viele Browserprogramme bringen darin mehr oder minder menschenlesbare Informationen zum Betriebssystem und sogar zur Hardwareplattform unter, auf der sie laufen. Andere verzichten vollständig darauf.
Zum Beispiel stammt der folgende Header vom Textmodus-Browser Lynx:
Lynx/2.8.4rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6c
Hier werden Namen und Versionen des Browsers selbst und mehrerer Bibliotheken angegeben. Kommentare fehlen.
Im Gegensatz dazu stammt dieser User-Agent-String von Opera 9.63:
Opera/9.63 (Macintosh; Intel Mac OS X; U; en) Presto/2.1.1
Hier kann man aus dem Kommentar ablesen, dass der Browser auf einem Intel-Mac mit x86-Prozessor läuft, sowie einige weitere Informationen. Der Buchstabe „U“ besagt, dass die im Browser verfügbaren kryptographischen Algorithmen nicht durch amerikanische Ausfuhrverbote eingeschränkt sind, der Teil „en“ gibt an, dass der Browser in der englischen Sprachversion vorliegt. Zusätzlich dazu wird die Versionsnummer der Rendering-Engine Presto angegeben.

### Mozilla-Standard

Bei der Einführung des Netscape-Navigators im Jahre 1994 führte dieser im „user agent string“ den Namen „Mozilla“, dies war der interne Codename des Projekts. Der Header sah also beispielsweise so aus:
Mozilla/1.0N (Windows)
Dies war noch vor der Standardisierung von HTTP, und damit des Headerformats, so dass damalige Browser oft auch von dem heute gültigen Format abweichen. So liefert etwa Netscape-Navigator 4.x die Anwendungssprache nach der Versionsnummer in eckigen Klammern, zum Beispiel:
Mozilla/4.06 [es] (Win98; I)
In den ersten Jahren nach der Einführung des Navigators erweiterte Netscape die Gestaltungsmöglichkeiten für Websites in rascher Folge um viele neue Techniken. Insbesondere die Version 2.0 vom Frühjahr 1996 brachte JavaScript (unter der Bezeichnung LiveScript), Plug-ins, animierte GIF-Bilder und verschiedene neue Textauszeichnungen. Wer diese Möglichkeiten zur Gestaltung seiner Webseiten einsetzen wollte, war zunächst praktisch darauf angewiesen, dass seine Besucher den Netscape-Navigator benutzten. Daher installierten viele Sites eine sogenannte Browserweiche, die den „user agent header“ ausliest und den Anwendern anderer Browser alternativ gestaltete Seiten oder zumindest eine aussagekräftige Fehlermeldung liefert.
Als andere Browser im Laufe der Zeit neuere, von Netscape eingeführte Merkmale ebenfalls unterstützten, wurden die Browserweichen oft nicht aktualisiert; die Benutzer dieser Produkte hätten dann diese Inhalte nicht erhalten, obwohl sie sie interpretieren konnten. Aus diesem Grund wurde es üblich, dass sie sich im „user agent header“ als Mozilla-Version ausgaben und den tatsächlichen Namen und die Version der Software nur im Kommentarfeld nannten. Beispielsweise lautet der „user agent header“ des Microsoft Internet Explorer 2.0 (erschienen im November 1995):
Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)
An dieser Konvention wird bis heute weitgehend festgehalten und die meisten Browser identifizieren sich immer noch mit Mozilla. So lautet etwa der „header“ von Safari unter iOS 5.0 auf dem iPhone 4s von Apple, erschienen im Oktober 2011, wie folgt.
Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
Die Bedeutung des „user agent header“ bei der Prüfung ist zurückgegangen, weil inzwischen die Browserversionen sehr zahlreich sind und bessere Möglichkeiten zur gezielten Prüfung auf einzelne Fähigkeiten mit Hilfe von JavaScript zur Verfügung stehen.
Die meisten Browser ermöglichen es dem Benutzer auch, den „user agent header“ zu verändern, üblicherweise in mitgelieferten, aber mehr oder minder versteckten Entwicklerwerkzeugen.

### Mobiltelefon

Im Gegensatz zu den PC-Webbrowsern übermitteln Browser auf Mobiltelefonen zusätzliche Informationen im User-Agent, wie Firmware-Version des Gerätes, Browser-Typ und Version, oder Unterstützung von Java (J2ME). Später ging man dazu über, zusätzliche Informationen in das UAProf (User Agent Profile) auszugliedern.
Beispiele:
* BlackBerry8520/5.0.0.681 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/114
* Mozilla/5.0 (Linux; U; Android 2.2; de-de; HTC Magic Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
* SonyEricssonT68/R201A
* Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537

### Suchmaschinen

Ein Webcrawler, also die das Netz durchsuchende Einheit einer Suchmaschine, sieht grundsätzlich für einen Web-Server aus wie normaler Browser, sendet aber in der Regel einen markanten User Agent String, um den Betreiber zu informieren. Dieser markante User Agent wird teilweise von Web-Serverbetreibern benutzt, um den Suchmaschinen speziell aufbereitete Informationen zu senden. Dieses Versenden speziell für Suchmaschinen aufbereiteter Informationen wird Cloaking genannt.

## E-Mail und Usenet News

Bei der Benutzung von E-Mail ist der User-Agent die Software, welche die Nachrichten von einem Mail-Server herunterlädt und dem Benutzer anzeigt, sowie ihm das Verfassen von neuen Nachrichten ermöglicht und diese wiederum an einen Mailserver überträgt. Es kann sich um ein Anwendungsprogramm handeln, das lokal auf dem Rechner des Anwenders läuft, oder auch um einen Webmail-Dienst wie beispielsweise GMX oder Gmail. Der Ausdruck Mail User Agent und vor allem auch die Abkürzung MUA sind in technischen Diskussionen durchaus geläufig, vor allem für lokale Anwendungsprogramme. Vergleichbares gilt für den Nachrichtenaustausch im Usenet, wo der User Agent meist als Newsreader bezeichnet wird.
Beim Versand von E-Mails oder Nachrichten im Usenet konstruiert der User Agent ein Nachrichtenpaket, das an den oder die Empfänger geschickt wird. Das Format dieser Nachrichten ist aktuell (Stand 2013) in RFC 5322 standardisiert. Die Nachrichten enthalten neben dem eigentlichen Text auch technische Informationen in Headerzeilen; der Standard sieht keinen Header zum Vermerken des User-Agent vor, der die Nachricht verschickt hat.
Es ist jedoch zulässig, dass User-Agents eigene Header nach Belieben in der Nachricht unterbringen, die nicht vom Standard vorgegeben sind. Viele Programme nutzen dies dazu, ihren Namen und ihre Version einzutragen. Das hat dann zur Folge, dass der Empfänger der Nachricht erkennen kann, mit welcher Software der Absender die E-Mail verschickt hat. Mangels Standardisierung sind verschiedene Headernamen hierfür geläufig. Der 1999 veröffentlichte, rein informative (nicht normative) RFC 2076, der einen Überblick über die damals gängigen Header gibt, nennt folgende Namen für die Angabe der Clientsoftware und deren Version:
* Version
* Mailer
* Originating-Client
* X-Mailer
* X-Newsreader
In der Praxis sind heute vor allem „X-Mailer“, „X-Newsreader“ und „User-Agent“ gängig, letzteres vielleicht in Anlehnung an den HTTP-Standard. Das Präfix „X-“ soll „experimentelle“ Header kennzeichnen, die Bedeutung dessen ist aber in der Praxis uneinheitlich. Der Inhalt des Headers ist natürlich auch nicht normiert und ein einheitlicher Aufbau ist nicht zu erkennen. Auch bei Verwendung des Headernamens „User-Agent“ halten sich die Programme nicht an den Aufbau, der in HTTP vorgesehen ist.
Der Inhalt dieser Header kann für statistische Erhebungen und für die Fehlersuche genutzt werden, wobei der uneinheitliche Gebrauch den statistischen Wert schmälern dürfte. Eine funktionale Nutzung wäre theoretisch möglich (zum Beispiel könnten bekannte Formatierungsfehler einer Software automatisch korrigiert werden, wenn diese Software anhand ihres Headers identifiziert wird), ist aber in der Praxis nicht bekannt.
Beispiele für E-Mail-Programme:
User-Agent: Microsoft Outlook IMO, Build 9.0.6604 (9.0.2911.0) User-Agent: Mutt/1.5.13 (2006-08-11) X-Mailer: Sylpheed version 0.9.6claws (GTK+ 1.2.10; i386-pc-linux-gnu)
Beispiele für Newsreader:
User-Agent: 40tude_Dialog/2.0.8.1de User-Agent: tin/1.7.2-20031104 ("Eriskay") (UNIX) (Linux/2.4.18-1-686 (i686)) X-Newsreader: Forte Agent 1.8/32.553
Es ist zu erkennen, dass teilweise Informationen über Betriebssystem und Hardwareplattform enthalten sind.