Glossar

Was User-Agent Client Hints senden und was Analytics noch sieht

Taras Shynkarenko
Taras Shynkarenko
•Aktualisiert: •9 Min. Lesezeit
Was User-Agent Client Hints senden und was Analytics noch siehtWas User-Agent Client Hints senden und was Analytics noch sieht

TL;DR, Kurzantwort

9 Min. Lesezeit

User-Agent Client Hints sind der Ersatz von Chromium für den vollständigen User-Agent-String. Jeder Request trägt drei Low-Entropy-Header, Sec-CH-UA, Sec-CH-UA-Mobile und Sec-CH-UA-Platform, mit der Browsermarke, der Hauptversion, einem Mobile-Flag und dem Namen des Betriebssystems. Ein Server fordert mehr an, etwa die OS-Version oder das Gerätemodell, mit einem Accept-CH-Response-Header, oder ein Skript ruft navigator.userAgentData.getHighEntropyValues() auf. Seit Chrome 110 ist der UA-String selbst auf feste Plattformwerte eingefroren. Firefox und Safari unterstützen Client Hints nicht.

Was sind User-Agent Client Hints?

Chromium-Browser senden User-Agent Client Hints als eine Reihe von Sec-CH-UA-Request-Headern, die Browser- und Plattformdetails in getrennten Feldern tragen, und die detaillierten Felder senden sie nur, wenn ein Server danach fragt. Die Entwicklerdokumentation von Chrome beschreibt das Modell als eines, "where the server must ask the browser for a set of data about the client (the hints) and the browser applies its own policies or user configuration to determine what data is returned." Die Hints sind seit Chrome 89 standardmäßig aktiv.

Der alte User-Agent-Header packte bei jedem Request alles in einen String: Browser, vollständige Version, Betriebssystem samt Version und unter Android das Gerätemodell. Googles Artikel zur Umstellung sagt, diese Kombination "could contain enough information to allow individual users to be uniquely identified." Client Hints teilen sie auf, sodass der Standard-Request weniger trägt und alles Zusätzliche auf eine Weise angefordert werden muss, die der Browser sehen kann.

Wenn Sie Website-Analytics betreiben, betrifft das zwei Reports: die Aufteilung nach Browser und Betriebssystem sowie den Gerätetyp. Beide funktionieren in Chrome weiterhin, aber einige Details, die früher kostenlos mitkamen, liegen jetzt hinter einem Opt-in.

Eine Anfrage, vorher und nachher
Alter User-Agent-Header
  • Browser und vollständige Version
  • Betriebssystem und Version
  • Gerätemodell unter Android
  • Alles bei jeder Anfrage
Standardanfrage von Chrome
  • Browser-Marke und Hauptversion
  • Mobile-Flag
  • Name des Betriebssystems
  • Mehr gibt es erst, wenn der Server danach fragt
Die Standardanfrage enthält weniger, und zusätzliche Details müssen so angefordert werden, dass der Browser es sehen kann.

Welche Sec-CH-UA-Header sendet Chrome?

Chrome sendet bei jedem HTTPS-Request drei Sec-CH-UA-Header und hält den Rest zurück, bis der Server ihn anfordert. Die WICG-Spezifikation definiert elf Header. Die für Analytics relevanten:

HeaderBeispielwertEntropieStandardmäßig gesendet?
Sec-CH-UA"Chromium";v="93", "Google Chrome";v="93"NiedrigJa
Sec-CH-UA-Mobile?0 für Desktop, ?1 für MobilNiedrigJa
Sec-CH-UA-Platform"macOS"NiedrigJa
Sec-CH-UA-Platform-Version"10.0.0"HochNein, braucht Accept-CH
Sec-CH-UA-Full-Version-List"Google Chrome";v="98.0.4738.0"HochNein, braucht Accept-CH
Sec-CH-UA-Model"Pixel 3"HochNein, braucht Accept-CH
Sec-CH-UA-Arch"arm"HochNein, braucht Accept-CH
Sec-CH-UA-Bitness"64"HochNein, braucht Accept-CH

Die Spezifikation definiert außerdem Sec-CH-UA-WoW64, Sec-CH-UA-Form-Factors und das veraltete Sec-CH-UA-Full-Version. Client Hints werden nur über sichere Verbindungen übertragen, eine Seite über einfaches HTTP bekommt also keinen davon.

Die Markenliste enthält eine bewusste Eigenheit. Sie umfasst eine Fake-Marke wie " Not;A Brand";v="99", die die Dokumentation von Chrome GREASE nennt und die an jeder Position mit jedem Namen auftauchen kann. MDN erklärt, dass sie Server davon abhalten soll, "rejecting unknown user agents outright." Jeder Parser, den Sie schreiben, muss Marken ignorieren, die er nicht kennt, statt nach Position zu matchen.

Was ist der Unterschied zwischen Low- und High-Entropy-Hints?

Low-Entropy-Hints sind die Felder, die ein Browser an jede Site sendet, weil sie kaum mehr verraten, als andere Header ohnehin zeigen, und High-Entropy-Hints sind die Felder, die einen Browser so weit eingrenzen, dass sie bei seiner Identifizierung helfen. Die WICG-Spezifikation sagt, die Standard-Hints legen "only the user agent's branding information, and the significant version number" offen, die beide "fairly clearly sniffable" aus anderen Headern und aus den vom Browser unterstützten Features sind.

"High Entropy" stammt aus der Informationstheorie. Die Dokumentation von Chrome beschreibt den Begriff als Verweis auf "the amount of information that these values reveal about the user's browser." Ein Modellname wie Pixel 3 oder ein exakter Build wie 98.0.4738.0 teilt die Menge der Chrome-Nutzer in weit kleinere Gruppen auf als "Chrome 98 auf Android". Der Leitfaden zum Browser-Fingerprinting erklärt, wie sich solche Felder in Kombination summieren.

Reihen von Netzwerkkabeln in einem Serverschrank, als Sinnbild für die Anfragen und Antworten, in denen Accept-CH-Header zwischen Browser und Server wandern.

Wie fordert eine Site High-Entropy-Hints mit Accept-CH an?

Eine Site fordert High-Entropy-Hints an, indem sie einen Accept-CH-Response-Header zurückgibt, der die gewünschten Hints nennt, woraufhin der Browser entscheidet, ob er sie bei späteren Requests an diesen Origin sendet. Der Austausch läuft in vier Schritten:

  1. Der Browser fordert eine Seite an und sendet nur Sec-CH-UA, Sec-CH-UA-Mobile und Sec-CH-UA-Platform.
  2. Der Server antwortet mit einem Header wie Accept-CH: Sec-CH-UA-Full-Version-List, Sec-CH-UA-Model, oder die Seite enthält dieselbe Liste in einem Tag <meta http-equiv="Accept-CH">.
  3. Spätere Requests an diesen Origin tragen die angeforderten Hints, sofern die Richtlinie des Browsers sie zulässt.
  4. Ein neuer Accept-CH-Header ersetzt die bisherige Auswahl vollständig, und ein leerer löscht sie.

Drei Regeln aus der Dokumentation von Chrome bringen Leute ins Straucheln. Über Accept-CH angeforderte Hints gelten "for the duration of the browser session or until a different set of hints are specified." Sie werden nur bei Same-Origin-Requests gesendet, ein Request an cdn.example.net bekommt also nichts, es sei denn, die Seite delegiert jeden Hint mit einem Permissions-Policy-Header. Und ein erster Besuch trägt nur die Standard-Hints, weil der Server noch nicht gefragt hat. Chromium dokumentiert einen separaten Mechanismus für Hints, die eine Site schon beim ersten Request braucht.

Skripte haben einen zweiten Weg. navigator.userAgentData stellt die Low-Entropy-Werte als brands, mobile und platform bereit, und navigator.userAgentData.getHighEntropyValues() gibt ein Promise mit Feldern wie model, platformVersion und fullVersionList zurück. Wie bei den Headern sagt Chrome: "it's down to the browser what values, if any, are returned."

Was hat die User-Agent-Reduktion in Chrome geändert?

Die User-Agent-Reduktion hat den Großteil des User-Agent-Strings von Chrome auf feste Werte eingefroren, sodass der alte Header nur noch die Hauptversion des Browsers, einen festen Plattform-String und eine Mobile-Kennung trägt. Das Chromium-Projekt hat sie in Phasen eingeführt:

Chrome-VersionReleaseÄnderung am UA-String
Chrome 10126. April 2022Minor-, Build- und Patch-Nummern auf 0.0.0 eingefroren
Chrome 10725. Oktober 2022Desktop-Plattform und OS-Version durch feste Werte ersetzt
Chrome 1107. Februar 2023Android-Version auf 10 festgelegt und Gerätemodell durch K ersetzt
Chrome 1132023Reverse Origin Trial beendet, alle Seitenaufrufe bekommen den reduzierten String

Die festen Desktop-Plattformwerte sind literale Strings. Chromium listet sie als Windows NT 10.0; Win64; x64, Macintosh; Intel Mac OS X 10_15_7, X11; Linux x86_64 und X11; CrOS x86_64 14541.0.0, und jedes Android-Smartphone meldet Linux; Android 10; K. Chromium merkt an, dass diese Werte "will not update even if a user is on an updated operating system or device." Die Reduktion gilt für Windows, macOS, Linux, ChromeOS und Chrome auf Android. Für iOS oder Android WebView hat Chromium derzeit keine Pläne.

Die Chromium-Seite sagt ausdrücklich, wohin die alten Details gewandert sind: "All of the information that was contained in the User-Agent string prior to reduction is available through the high entropy client hints."

Flowsery
Flowsery

Jetzt 14 Tage kostenlos testen

Echtzeit-Dashboard

Zielverfolgung

Cookie-freies Tracking

Welche Browser unterstützen User-Agent Client Hints?

Chromium-Browser unterstützen User-Agent Client Hints, Firefox und Safari nicht. Die Kompatibilitätsdaten von MDN führen Sec-CH-UA als unterstützt in Chrome und Edge ab Version 89 und in Opera ab Version 75, und sie führen sowohl Sec-CH-UA als auch Accept-CH als nicht unterstützt in Firefox und Safari. navigator.userAgentData folgt derselben Aufteilung.

Damit bleiben Analytics zwei Wege zum Parsen. In Chrome und Edge liefern der reduzierte UA-String plus die Low-Entropy-Hints Browser, Hauptversion, OS-Namen und ein Mobile-Flag. In Firefox und Safari ist der User-Agent-Header weiterhin die einzige Quelle, und WebKit hat seinen eigenen String ebenfalls eingefroren. Seine Seite zur Tracking Prevention führt unter den Änderungen gegen Fingerprinting auf, dass WebKit "altered the user agent string to not change with minor software updates."

Mehrere Smartphones neben einem Laptop auf einem Schreibtisch, als Bild für die Mischung aus Geräten und Browsern, die ein Analytics-Report auseinanderhalten muss.

Was kann ein Analytics-Tool für Browser-, OS- und Gerätereports noch lesen?

Ein Analytics-Tool liest aus jedem Chrome-Besuch weiterhin Browsernamen, Hauptversion, OS-Familie und Mobil oder Desktop, ohne etwas anzufordern, aber die OS-Version und das Gerätemodell brauchen High-Entropy-Hints. Die praktische Aufteilung für einen Chrome-Besucher:

Report-FeldAus dem reduzierten UA-StringAus den Standard-Low-Entropy-HintsBraucht High-Entropy-Hint
BrowsernameJaJa, Sec-CH-UANein
Hauptversion des BrowsersJaJa, Sec-CH-UANein
Vollständige BrowserversionNein, zeigt .0.0.0NeinSec-CH-UA-Full-Version-List
OS-NameJaJa, Sec-CH-UA-PlatformNein
OS-VersionNein, fester WertNeinSec-CH-UA-Platform-Version
Mobil oder DesktopJa, Token MobileJa, Sec-CH-UA-MobileNein
Smartphone-ModellNein, zeigt KNeinSec-CH-UA-Model

Jeder Windows-11-Besucher in Chrome meldet im UA-String Windows NT 10.0, eine Aufteilung in Windows 10 und 11 auf Basis des UA-Strings ist also falsch. Besuche über Chrome auf Android geben alle Version 10 an. Wenn ein OS-Versions-Diagramm in Ihrem Analytics zeigt, dass eine einzelne Version zwischen Ende 2022 und Mitte 2023 alles übernimmt, ist das die Reduktion und nicht Ihr Publikum. Auch die Bot-Erkennung wird schwieriger, weil ein automatisierter Client einen aktuellen Chrome-String mit einer Zeile Code kopiert. Der Leitfaden zum Filtern von Bot-Traffic behandelt Prüfungen, die sich nicht allein auf den UA verlassen.

Reduzieren User-Agent Client Hints Fingerprinting?

User-Agent Client Hints reduzieren passives Fingerprinting, weil eine Site nicht mehr bei jedem Request die vollständige Version, die OS-Version und das Gerätemodell bekommt, aber sie stoppen kein Skript, das gezielt nach High-Entropy-Werten fragt. Die WICG-Spezifikation nennt beide Hälften: Das Ziel sei, "reduce the amount of default entropy exposed to the web at large," dennoch "it will still be possible for some, or all, hints to be requested and used for active fingerprinting purposes."

Der Unterschied liegt in der Sichtbarkeit. Eine Anforderung von Sec-CH-UA-Model taucht im Accept-CH-Header der Site oder in einem Aufruf von getHighEntropyValues() auf, den Privacy-Tools und Prüfer erkennen können. Der alte String hat dieselben Daten stillschweigend herausgegeben. Für Website-Betreiber gilt eine einfache Regel: Fordern Sie einen High-Entropy-Hint nur an, wenn ein Feature ihn braucht, etwa um den passenden Download für eine CPU-Architektur auszuwählen, und nicht, um Analytics-Profile anzureichern.

Was meldet Flowsery über Browser und Geräte?

Flowsery meldet Geräte-, Browser- und OS-Daten in seinem Analytics und tut das ohne Browser-Fingerprinting, ohne Cookies im Cookieless-Modus und ohne personenbezogene Daten zu speichern. Die API von Flowsery liefert Browser-Aufteilungen mit Besucherzahlen und Umsatz pro Browser, filtert nach Browsernamen wie Chrome, Safari, Firefox und Edge, wobei "Safari includes Mobile Safari automatically", und gruppiert Besucher nach Dimensionen, zu denen browser_version und os_version gehören. Der Visitor-Endpunkt liefert Gerätetyp, Browser, OS und Viewport-Maße aus dem letzten Seitenaufruf. Im Cookieless-Modus nutzt Flowsery einen täglich rotierenden Besucher-Hash, sodass diese Felder Sitzungen auf Ihrer Site beschreiben, ohne ein tagesübergreifendes Profil eines Geräts aufzubauen. Das ist ein Grund, warum Unique Visitors in verschiedenen Tools Unterschiedliches bedeuten. Die Feature-Seite zu datenschutzfreundlichem Analytics listet auf, was der Tracker erhebt.

Häufig gestellte Fragen

Ersetzen User-Agent Client Hints den User-Agent-Header?

Nein, Chrome sendet den User-Agent-Header weiterhin, aber in reduzierter Form mit eingefrorener Minor-Version und festen Plattformwerten. Die daraus entfernten Details sind über High-Entropy-Client-Hints verfügbar, die eine Site anfordern muss.

Sendet Firefox Sec-CH-UA-Header?

Nein. Die Kompatibilitätsdaten von MDN führen Sec-CH-UA und Accept-CH als nicht unterstützt in Firefox und Safari. Diese Browser beschreiben sich weiterhin nur über den User-Agent-Header.

Warum zeigt mein Analytics jeden Android-Nutzer mit Android 10?

Chrome 110 hat die Android-Version im UA-String auf 10 festgelegt und das Gerätemodell durch K ersetzt. Jedes Tool, das nur den UA-String parst, meldet für jeden Besuch über Chrome auf Android Android 10. Die echte Version braucht den Hint Sec-CH-UA-Platform-Version.

Kann Analytics in Chrome Windows 11 von Windows 10 unterscheiden?

Nicht über den UA-String, der für beide Windows NT 10.0 meldet. Eine Site, die Sec-CH-UA-Platform-Version über Accept-CH anfordert oder getHighEntropyValues() aufruft, erhält die Plattformversion, die Chrome zu teilen bereit ist.

Brauche ich HTTPS für Client Hints?

Ja. Chrome sendet Client Hints nur über sichere Verbindungen, eine Site auf einfachem HTTP erhält also überhaupt keine Sec-CH-UA-Header.

Sind High-Entropy-Client-Hints personenbezogene Daten?

Für sich genommen nennen ein Gerätemodell oder eine OS-Build-Nummer keine Person. Zusammen mit anderen Signalen zu einer stabilen Kennung kombiniert, werden sie Teil eines Fingerprints, und ein Fingerprint, der ein Gerät herausgreift, gilt nach der DSGVO als personenbezogenes Datum. Deshalb vermeidet datenschutzfreundliches Analytics, einen solchen aufzubauen.

Was ist die falsche Marke im Sec-CH-UA-Header?

Es ist ein GREASE-Eintrag wie " Not;A Brand";v="99", der an jeder Position und mit jedem Namen auftauchen kann. Er soll verhindern, dass Server unbekannte User Agents pauschal ablehnen. Ein Parser sollte Marken ignorieren, die er nicht kennt, statt nach der Position zu suchen.

Flowsery
Flowsery

Jetzt 14 Tage kostenlos testen

Echtzeit-Dashboard

Zielverfolgung

Cookie-freies Tracking

Wie bekomme ich die vollständige Chrome-Version oder das Gerätemodell in Analytics?

Senden Sie einen Accept-CH-Header, der die gewünschten Hints nennt, etwa Sec-CH-UA-Full-Version-List und Sec-CH-UA-Model. Ein Skript kann auch navigator.userAgentData.getHighEntropyValues() aufrufen. In beiden Fällen entscheidet der Browser, was er zurückgibt, wenn überhaupt.

Erreichen Client Hints auch Anfragen an andere Domains?

Hints, die über Accept-CH angefordert wurden, gehen nur bei Same-Origin-Anfragen mit. Eine Anfrage an cdn.example.net bekommt nichts, solange die Seite nicht jeden Hint per Permissions-Policy-Header delegiert.

Sendet Chrome High-Entropy-Hints schon beim ersten Besuch?

Beim ersten Besuch kommen nur die drei Standard-Hints an, weil der Server noch nichts angefordert hat. Sobald der Server Accept-CH sendet, enthalten spätere Anfragen die angeforderten Hints für die Browsersitzung oder bis ein anderer Satz festgelegt wird. Für Hints, die eine Site schon bei der ersten Anfrage braucht, dokumentiert Chromium einen eigenen Mechanismus.

War dieser Artikel hilfreich?

Teilen Sie uns Ihre Meinung mit!

Sieh uns öfter bei Google

Ein Klick macht Flowsery zu einer bevorzugten Quelle. Unsere Artikel stehen dann weiter oben in deinen Top-Meldungen, im KI-Modus und in den KI-Übersichten.

Bevor Sie gehen...

Flowsery

Flowsery

Umsatzorientierte Analysen für Ihre Website

Verfolgen Sie jeden Besucher, jede Quelle und jede Conversion in Echtzeit. Einfach, leistungsstark und komplett ohne Cookies.

Echtzeit-Dashboard

Zielverfolgung

Cookie-freies Tracking

Verwandte Glossarbegriffe

Warum CNAME-Cloaking Tracker nicht mehr vor Safari oder Brave verstecktWarum CNAME-Cloaking Tracker nicht mehr vor Safari oder Brave versteckt
Glossar

Warum CNAME-Cloaking Tracker nicht mehr vor Safari oder Brave versteckt

Tracker tarnten sich per CNAME-Cloaking als Ihre Subdomain. Wie der Trick wirkt, warum Safari Cookies auf 7 Tage kappt und wie Brave und uBlock ihn enttarnen.

•9 Min. Lesezeit
Wie Cookie-Syncing Werbe-IDs über Websites hinweg abgleichtWie Cookie-Syncing Werbe-IDs über Websites hinweg abgleicht
Glossar

Wie Cookie-Syncing Werbe-IDs über Websites hinweg abgleicht

Ad-Tech-Firmen tauschen per Cookie-Syncing Nutzer-IDs über Redirects und Pixel. Was Safari, Firefox und Chrome dagegen tun und warum Analytics es nie braucht.

•9 Min. Lesezeit
Wie Sie berechnete Messwerte in GA4 mit nur fünf Plätzen erstellenWie Sie berechnete Messwerte in GA4 mit nur fünf Plätzen erstellen
Glossar

Wie Sie berechnete Messwerte in GA4 mit nur fünf Plätzen erstellen

Google erlaubt nur 5 berechnete Messwerte in GA4 pro Standard-Property. Hier stehen Formelsyntax, Einheiten, Fundorte und was keine Formel nutzen darf.

•8 Min. Lesezeit
So richten Sie die Content-Gruppierung in GA4 mit einem Parameter einSo richten Sie die Content-Gruppierung in GA4 mit einem Parameter ein
Glossar

So richten Sie die Content-Gruppierung in GA4 mit einem Parameter ein

So richten Sie die Content-Gruppierung in GA4 mit content_group per gtag oder Tag Manager ein, lesen die Dimension Content group und vermeiden (not set).

•8 Min. Lesezeit
Warum eindeutige Besucher je nach Tool etwas anderes bedeutenWarum eindeutige Besucher je nach Tool etwas anderes bedeuten
Glossar

Warum eindeutige Besucher je nach Tool etwas anderes bedeuten

Was eindeutige Besucher bedeuten, hängt vom Tool ab: GA4 schätzt die Zahl, Matomo verweigert lange Zeiträume, Adobe dedupliziert über den Report.

•7 Min. Lesezeit
Google nennt sieben getrennte Ursachen für not set in GA4Google nennt sieben getrennte Ursachen für not set in GA4
Glossar

Google nennt sieben getrennte Ursachen für not set in GA4

Googles Doku nennt für not set in GA4 je Dimension eine eigene Ursache, vom fehlenden session_start bis zum leeren content_group. Jede Ursache mit Fix.

•8 Min. Lesezeit

Verwandte Artikel