Was ist eine Reduzierung des User-Agents?

Die Reduzierung des User-Agents (UA) minimiert die personenidentifizierbaren Informationen im User-Agent-String, die für passives Fingerprinting verwendet werden können. Nachdem diese Änderungen allgemein eingeführt wurden, haben alle Ressourcenanfragen einen reduzierten User-Agent-Header. Daher werden die Rückgabewerte bestimmter Navigator-Schnittstellen reduziert, darunter navigator.userAgent, navigator.appVersion und navigator.platform.

Webentwickler sollten den Code ihrer Website auf die Verwendung des User-Agent-Strings überprüfen. Wenn auf Ihrer Website der User-Agent-String geparst wird, um das Gerätemodell, die Plattformversion oder die vollständige Browserversion zu lesen, müssen Sie die User-Agent-Client-Hints API implementieren.

User-Agent-Client-Hints (UA-CH)

User-Agent Client Hints ermöglichen den Zugriff auf den vollständigen Satz von User-Agent-Daten, aber nur, wenn Server aktiv einen expliziten Bedarf an bestimmten Daten deklarieren.

Durch das Entfernen von passiv bereitgestellten Nutzerdaten können wir die Menge an Informationen, die durch Anfrageheader, JavaScript-APIs und andere Mechanismen absichtlich bereitgestellt werden, besser messen und reduzieren.

Warum benötigen wir eine reduzierte UA und UA-CH?

Bisher wurde mit jeder HTTP-Anfrage ein langer String mit Daten zum Browser, Betriebssystem und zur Version eines Nutzers gesendet. Das war aus zwei Gründen problematisch:

  • Die Granularität und Fülle der Details können zur Identifizierung von Nutzern führen.
  • Die standardmäßige Verfügbarkeit dieser Informationen kann zu verdeckter Standortverfolgung führen.

Durch die Reduzierung von UA und UA-CH wird die Privatsphäre der Nutzer verbessert, da standardmäßig nur grundlegende Informationen weitergegeben werden.

Der reduzierte User-Agent enthält die Marke des Browsers, eine wichtige Version, den Ursprung der Anfrage (Computer oder Mobilgerät) und die Plattform. Mit User-Agent-Client-Hints können Sie auf mehr Daten zugreifen, indem Sie bestimmte Informationen zum Gerät oder zu den Bedingungen des Nutzers anfordern.

Außerdem wurde der User-Agent-String im Laufe der Zeit länger und komplexer, was zu fehleranfälligem String-Parsing führte. UA-CH liefert strukturierte und zuverlässige Daten, die leichter zu interpretieren sind. Vorhandener Code, der den UA-String parst, sollte nicht unterbrochen werden (obwohl weniger Daten zurückgegeben werden). Sie müssen zu UA-CH migrieren, wenn Ihre Website spezifische Clientinformationen benötigt.

Wie funktioniert die reduzierte UA und UA-CH?

Hier sehen Sie ein kurzes Beispiel für die Funktionsweise des reduzierten User-Agent-Strings und UA-CH. Ein ausführlicheres Beispiel finden Sie unter User-Agent-Client-Hints zur Verbesserung des Datenschutzes und der Entwicklerfreundlichkeit.

Ein Nutzer öffnet den Browser und gibt example.com in die Adressleiste ein:

  1. Der Browser sendet eine Anfrage zum Laden der Webseite.

    1. Der Browser fügt den Header User-Agent mit dem reduzierten User-Agent-String ein. Beispiel: User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Mobile Safari/537.36
    2. Der Browser fügt diese Informationen in die standardmäßigen User-Agent Client Hint-Headern ein. Beispiel:

      Sec-CH-UA: "Chrome"; v="98"
      Sec-CH-UA-Mobile: ?1
      Sec-CH-UA-Platform: "Android"
      
  2. Der Server kann den Browser mit dem Antwortheader Accept-CH auffordern, zusätzliche Client-Hinweise wie das Gerätemodell zu senden. Beispiel: Accept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, Sec-CH-UA-Model

  3. Der Browser wendet Richtlinien und Nutzerkonfigurationen an, um zu bestimmen, welche Daten in nachfolgenden Anfrage-Headern an den Server zurückgegeben werden dürfen. Beispiel:

    Sec-CH-UA: "Chrome"; v="93"
    Sec-CH-UA-Mobile: ?1
    Sec-CH-UA-Platform: "Android"
    Sec-CH-UA-Model: "Pixel 2"
    

Wichtige Client-Hints

Wenn Sie in Ihrer Erstanfrage bestimmte Client-Hinweise benötigen, können Sie den Antwortheader Critical-CH verwenden. Critical-CH-Werte müssen eine Teilmenge der von Accept-CH angeforderten Werte sein.

Die ursprüngliche Anfrage kann beispielsweise eine Anfrage für Device-Memory und Viewport-Width enthalten, wobei Device-Memory als kritisch gilt.

GET / HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Device-Memory, Viewport-Width
Vary: Device-Memory, Viewport-Width
Critical-CH: Device-Memory

Wenn der Browser einen wichtigen Hinweis (Critical-CH) benötigt, um die Webseite richtig zu rendern, kann der Server diese zusätzlichen Informationen mit dem Accept-CH-Header anfordern. Der Browser kann dann eine neue Anfrage für die Seite senden, die den wichtigen Hinweis enthält.

Zusammenfassend lässt sich sagen, dass mit Accept-CH alle Werte angefordert werden, die Sie für die Seite benötigen, während mit Critical-CH nur die Teilmenge der Werte angefordert wird, die Sie beim Laden der Seite benötigen. Weitere Informationen finden Sie in der Spezifikation zur Zuverlässigkeit von Client-Hinweisen.

Tablet-Geräte mit der UA-CH API erkennen

Da die Grenzen zwischen Smartphones, Tablets und Computern immer weniger deutlich werden und dynamische Formfaktoren immer häufiger vorkommen (faltbare Bildschirme, Wechsel zwischen Laptop- und Tablet-Modus), ist es ratsam, responsives Design und die Erkennung von Funktionen zu verwenden, um eine geeignete Benutzeroberfläche zu präsentieren.

Die vom Browser bereitgestellten Informationen für den User-Agent-String und die User-Agent-Client-Hints stammen jedoch aus derselben Quelle. Daher sollten dieselben Logikformen funktionieren.

Wenn dieses Muster beispielsweise für den UA-String geprüft wird:

  • Telefonmuster: 'Android' + 'Chrome/[.0-9]* Mobile'
  • Tablet-Muster: 'Android' + 'Chrome/[.0-9]* (?!Mobile)'

Die entsprechende Standard-UA-CH-Headers-Schnittstelle kann geprüft werden:

  • Telefonmuster: Sec-CH-UA-Platform: "Android", Sec-CH-UA-Mobile: ?1
  • Tablet-Muster: Sec-CH-UA-Platform: "Android", Sec-CH-UA-Mobile: ?0

Oder die entsprechende JavaScript-Schnittstelle:

  • Telefonmuster: navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === true
  • Tablet-Muster: navigator.userAgentData.platform === 'Android' && navigator.userAgentData.mobile === false

Bei hardwarespezifischen Anwendungsfällen kann der Gerätemodellname über den Hinweis Sec-CH-UA-Model mit hoher Entropie angefordert werden.

Wie verwende und teste ich die reduzierte Nutzer-ID?

Überprüfen Sie zuerst den Code Ihrer Website auf Instanzen und Verwendungen des User-Agent-Strings. Wenn auf Ihrer Website der User-Agent-String geparst wird, um das Gerätemodell, die Plattformversion oder die vollständige Browserversion zu lesen, müssen Sie die UA-CH API implementieren.

Nachdem Sie auf die UA-CH API umgestellt haben, sollten Sie testen, ob Sie die erwarteten Daten vom User-Agent erhalten. Es gibt drei Testmethoden, die jeweils komplexer werden.

Die skalierte Verfügbarkeit für die Verringerung des User-Agents bedeutet, dass der vollständig reduzierte UA-String auf allen Chrome-Geräten ausgeliefert wird. Die Reduzierung begann mit einer untergeordneten Chrome-Version im 2. Quartal 2022.

Benutzerdefinierte Strings lokal testen

Wenn Sie Ihre Website mit benutzerdefinierten User-Agent-Strings testen möchten, um verschiedene Geräte zu simulieren, starten Sie Chrome mit dem Befehlszeilen-Flag --user-agent="Custom string here". Weitere Informationen zu Befehlszeilen-Flags

Alternativ können Sie den Geräteemulator in den Chrome-Entwicklertools verwenden.

String im Code Ihrer Website transformieren

Wenn Sie den vorhandenen Chrome-user-agent-String in Ihrem clientseitigen oder serverseitigen Code verarbeiten, können Sie ihn in das neue Format umwandeln, um die Kompatibilität zu testen. Sie können den String entweder überschreiben und ersetzen oder die neue Version generieren und nebeneinander testen.

Unterstützung für Client- und kritische Hinweise

Es gibt drei Standard-Client-Hinweise, die an den Server zurückgegeben werden, darunter den Browsernamen und die Hauptversion, einen booleschen Wert, der angibt, ob der Browser auf einem Mobilgerät ausgeführt wird, und den Namen des Betriebssystems. Sie werden nach dem TLS-Handshake (Transport Layer Security) gesendet. Diese sind bereits in Ihrem Browser verfügbar und werden unterstützt.

Es kann jedoch vorkommen, dass Sie wichtige Informationen abrufen müssen, damit Ihre Website gerendert werden kann.

Wichtige Hinweise optimieren

Ein TLS-Handshake ist der erste Schritt, um eine sichere Verbindung zwischen dem Browser und dem Webserver herzustellen. Ohne Eingriff sollte der Browser durch den Critical-CH-Antwortheader angewiesen werden, die Anfrage sofort noch einmal zu senden, wenn die erste Anfrage ohne kritischen Hinweis gesendet wurde.

Sequenzdiagramm für Client Hints mit kritischen Hinweisen.
Wenn der Server einen kritischen Hinweis anfordert, versucht der Client noch einmal, die erste Anfrage für die Webseite mit dem kritischen Hinweis zu senden. In diesem Beispiel wird der Hinweis für Sec-CH-UA-Model zweimal angefordert: einmal als Client-Hinweis mit Accept-CH und noch einmal als kritischer Hinweis mit Critical-CH.

Wenn Sie kritische Hinweise (Critical-CH-Header) optimieren möchten, müssen Sie diesen Handshake abfangen und ein Modell für Client Hints bereitstellen. Diese Schritte können komplex sein und erfordern fortgeschrittene Kenntnisse.

Die ACCEPT_CH-HTTP/2- und ACCEPT_CH-HTTP/3-Frames in Kombination mit der TLS-ALPS-Erweiterung sind eine Optimierung auf Verbindungsebene, um die Client-Hinweis-Einstellungen des Servers rechtzeitig für die erste HTTP-Anfrage zu liefern. Diese erfordern eine komplexe Konfiguration und sollten nur für wirklich kritische Informationen verwendet werden.

BoringSSL (ein Fork von OpenSSL) hilft Ihnen, mit den experimentellen Funktionen von Google in Chromium zu arbeiten. Derzeit ist ALPS nur in BoringSSL implementiert.

Wenn Sie kritische Hinweise verwenden müssen, lesen Sie unseren Leitfaden zur Zuverlässigkeit und Optimierung kritischer Hinweise.

FAQ

Wie lange werden Hinweise gesendet, die über den Accept-CH-Header angegeben wurden?

Über den Accept-CH-Header angegebene Hinweise werden für die Dauer der Browsersitzung oder bis zur Angabe einer anderen Gruppe von Hinweisen gesendet.

Funktioniert UA-CH mit HTTP/2 und HTTP/3?

UA-CH funktioniert sowohl mit HTTP/2- als auch mit HTTP/3-Verbindungen.

Benötigen Subdomains (und CNAMEs) eine Seite der obersten Ebene Permissions-Policy, um auf UA-CH mit hoher Entropie zuzugreifen?

UA-CH-Header mit hoher Entropie in Anfrageheadern sind bei ursprungsübergreifenden Anfragen eingeschränkt, unabhängig davon, wie dieser Ursprung auf DNS-Seite definiert ist. Die Delegation muss über Permissions-Policy für alle ursprungsübergreifenden untergeordneten Ressourcen erfolgen oder über JavaScript abgerufen werden, das im ursprungsübergreifenden Kontext ausgeführt wird.

Wie wirkt sich die User-Agent-Reduzierung auf die Bot-Erkennung aus?

Die Änderung des User-Agent-Strings in Chrome hat keine direkten Auswirkungen auf den User-Agent-String, den ein Bot sendet.

Bots können ihre eigenen Strings aktualisieren, um die geringere Menge an Informationen zu berücksichtigen, die Chrome sendet. Das ist jedoch ihre eigene Entscheidung. Chrome sendet weiterhin das gleiche User-Agent-Format und Bots, die ihre eigene Kennung an das Ende eines Chrome-User-Agent-Strings anhängen, können dies weiterhin tun.

Wenn Sie Bedenken bezüglich bestimmter Bots haben, sollten Sie sich direkt an die Eigentümer wenden und fragen, ob sie planen, den User-Agent-String zu ändern.

Feedback geben

Weitere Informationen