Mit User-Agent-Client-Hints den Datenschutz und die Nutzerfreundlichkeit für Entwickler verbessern

User-Agent-Client Hints sind eine neue Erweiterung der Client Hints API, mit der Entwickler auf datenschutzfreundliche und ergonomische Weise auf Informationen zum Browser eines Nutzers zugreifen können.

Mit Client-Hints können Entwickler aktiv Informationen über die Gerät oder Bedingungen anstatt im User-Agent (UA) zu parsen. . Die Bereitstellung dieser alternativen Route ist der erste Schritt, reduziert den Detaillierungsgrad von User-Agent-Strings.

Erfahren Sie, wie Sie Ihre vorhandene Funktionalität aktualisieren, die auf dem Parsen des User-Agent-String, um stattdessen User-Agent-Client-Hints zu verwenden.

Hintergrund

Wenn Webbrowser Anfragen stellen, enthalten diese Informationen über den Browser und damit Server Analysen ermöglichen und die Antwort anpassen können. Dies wurde schon 1996 definiert (RFC 1945 für HTTP/1.0). Hier können Sie die ursprüngliche Definition für den User-Agent-String zu finden, die ein Beispiel:

User-Agent: CERN-LineMode/2.15 libwww/2.17b3

Mit dieser Überschrift sollte das Produkt (z.B. Browser oder Bibliothek) und einen Kommentar (z.B. die Version) enthält.

Status des User-Agent-Strings

In den Jahrzehnten sind durch diesen String zahlreiche zusätzliche Details über den Kunden, der die Anfrage stellt (sowie überflüssige Informationen, Kompatibilität). Im aktuellen User-Agent von Chrome String:

Mozilla/5.0 (Linux; Android 10; Pixel 3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4076.0 Mobile Safari/537.36

Der String oben enthält Informationen zum Betriebssystem und Gerätemodell, die Marke des Browsers und die Vollversion – genug Anhaltspunkte, um daraus abzuleiten, dass es sich um einen mobilen Browser handelt, und ganz zu schweigen von einer Reihe von Verweisen aus historischen Gründen.

Die Kombination dieser Parameter mit der großen Vielfalt möglicher Werte bedeutet, dass der User-Agent-String genügend Informationen enthalten könnte, um individuelle eindeutig identifiziert werden können.

Der User-Agent-String ermöglicht viele legitime Anwendungsfälle, und erfüllt sowohl Entwickler als auch Websiteinhaber. Es ist jedoch ist es außerdem wichtig, dass die Nutzenden wird die Privatsphäre vor verdeckten Verfolgungsmethoden, Das Senden von UA-Informationen gilt standardmäßig für dieses Zielvorhaben.

Auch die Webkompatibilität muss verbessert werden, wenn es um den User-Agent geht. . Es ist unstrukturiert, sodass das Parsen zu unnötiger Komplexität führt. was häufig die Ursache für Programmfehler und Probleme mit der Websitekompatibilität ist, die Nutzern schaden. Diese Probleme schaden auch unverhältnismäßig vielen Nutzern von weniger gängigen Browsern, da Websites möglicherweise beim Testen ihrer Konfiguration fehlgeschlagen.

Die neuen User-Agent-Client-Hints

User-Agent-Client-Hints Zugang zu denselben Informationen ermöglichen, aber auf datenschutzfreundlichere Art und Weise, Browser aktivieren, um die Standardeinstellung des User-Agent-Strings zu reduzieren alles verbreitet. Client Hints erzwingen eine Modell, bei dem der Server den Browser nach einem Satz von Daten zum Client fragen muss, und der Browser seine eigenen Richtlinien oder Nutzerkonfigurationen auf bestimmen, welche Daten zurückgegeben werden. Anstatt alle standardmäßig die User-Agent-Informationen verwenden, wird der Zugriff jetzt in einer expliziten prüfbar sein. Entwickler profitieren außerdem von einer einfacheren API, Ausdrücke!

Die aktuellen Client Hints beschreiben vor allem die Anzeige und Verbindungsmöglichkeiten. Weitere Informationen finden Sie unter Ressourcenauswahl mit Clienthinweisen automatisieren. Aber hier ist eine kurze Auffrischung zum Prozess.

Der Server fordert über einen Header bestimmte Client-Hints an:

⬇️ Antwort vom Server

Accept-CH: Viewport-Width, Width

Oder ein Meta-Tag:

<meta http-equiv="Accept-CH" content="Viewport-Width, Width" />

Der Browser kann dann die folgenden Header in nachfolgenden Anfragen:

⬆️ Späterer Antrag

Viewport-Width: 460
Width: 230

Der Server kann seine Antworten variieren und beispielsweise Bilder an einer angemessene Lösung zu finden.

User-Agent-Client-Hints erweitern die Reihe von Properties mit der Sec-CH-UA Präfix, das über den Antwortheader des Accept-CH-Servers angegeben werden kann. Für alle beginnen Sie mit der Erklärung und Sehen Sie sich dann das vollständige Angebot an.

User-Agent-Client-Hints von Chromium 89

User-Agent-Client-Hints sind in Chrome seit Version 89 standardmäßig aktiviert.

Standardmäßig gibt der Browser die Browsermarke, wichtige / Hauptversion, Plattform und ein Indikator, ob es sich beim Client um ein Mobilgerät handelt:

⬆️ Alle Anfragen

Sec-CH-UA: "Chromium";v="93", "Google Chrome";v="93", " Not;A Brand";v="99"
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Platform: "macOS"

User-Agent-Antwort- und Anfrageheader

😃️ Antwort Accept-CH
⬆️ Anfrageheader
⬆️ Anfrage
Beispielwert
Beschreibung
Sec-CH-UA "Chromium";v="84",
"Google Chrome";v="84"
Liste der Browsermarken und deren Hauptversion.
Sec-CH-UA-Mobile ?1 Boolescher Wert, der angibt, ob der Browser ein Mobilgerät verwendet (?1 für wahr) oder nicht (?0 für falsch).
Sec-CH-UA-Full-Version "84.0.4143.2" [Verworfen]Die vollständige Version für den Browser.
Sec-CH-UA-Full-Version-List "Chromium";v="84.0.4143.2",
"Google Chrome";v="84.0.4143.2"
Liste der Browsermarken und deren Vollversion.
Sec-CH-UA-Platform "Android" Die Plattform für das Gerät, in der Regel das Betriebssystem.
Sec-CH-UA-Platform-Version "10" Die Version für die Plattform oder das Betriebssystem.
Sec-CH-UA-Arch "arm" Die zugrunde liegende Architektur für das Gerät. Auch wenn dies für die Darstellung der Seite nicht relevant ist, kann es sein, dass die Website einen Download im richtigen Format anbieten möchte.
Sec-CH-UA-Model "Pixel 3" Gerätemodell
Sec-CH-UA-Bitness "64" Die Bitness der zugrunde liegenden Architektur (d.h. die Größe einer Ganzzahl oder Speicheradresse in Bit)

Beispiel-Anzeigenplattform

Ein Beispiel für eine Anzeigenplattform würde so aussehen:

⬆️ Erste Anfrage vom Browser
Der Browser fordert die /downloads an von der Website und sendet ihren standardmäßigen einfachen User-Agent.

GET /downloads HTTP/1.1
Host: example.site

Sec-CH-UA: "Chromium";v="93", "Google Chrome";v="93", " Not;A Brand";v="99"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Platform: "Android"

⬇️ Antwort vom Server
Der Server sendet die Seite zurück und fragt nach der Vollversion des Browsers und der Plattform.

HTTP/1.1 200 OK
Accept-CH: Sec-CH-UA-Full-Version-List

⬆️ Nachfolgende Anfragen
Der Browser gewährt dem Server Zugriff auf die zusätzliche Informationen und sendet die zusätzlichen Hinweise an alle nachfolgenden -Anfragen.

GET /downloads/app1 HTTP/1.1
Host: example.site

Sec-CH-UA: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Full-Version-List: " Not A;Brand";v="99.0.0.0", "Chromium";v="98.0.4738.0", "Google Chrome";v="98.0.4738.0"
Sec-CH-UA-Platform: "Android"

JavaScript API

Neben den Headern kann auf den User-Agent auch in JavaScript über navigator.userAgentData Die Standardeinstellungen Sec-CH-UA, Sec-CH-UA-Mobile und Der Sec-CH-UA-Platform-Header kann über brands und mobile-Properties:

// Log the brand data
console.log(navigator.userAgentData.brands);

// output
[
  {
    brand: 'Chromium',
    version: '93',
  },
  {
    brand: 'Google Chrome',
    version: '93',
  },
  {
    brand: ' Not;A Brand',
    version: '99',
  },
];

// Log the mobile indicator
console.log(navigator.userAgentData.mobile);

// output
false;

// Log the platform value
console.log(navigator.userAgentData.platform);

// output
"macOS";

Auf die zusätzlichen Werte kann über den getHighEntropyValues()-Aufruf zugegriffen werden. Die „hohe Entropie“ ist eine Referenz auf Informationsentropie, in anderen Wörter – die Menge an Informationen, die diese Werte über die Browser. Wie bei der Anforderung der zusätzlichen Header hängt der welche Werte zurückgegeben werden, falls vorhanden.

// Log the full user-agent data
navigator
  .userAgentData.getHighEntropyValues(
    ["architecture", "model", "bitness", "platformVersion",
     "fullVersionList"])
  .then(ua => { console.log(ua) });

// output
{
   "architecture":"x86",
   "bitness":"64",
   "brands":[
      {
         "brand":" Not A;Brand",
         "version":"99"
      },
      {
         "brand":"Chromium",
         "version":"98"
      },
      {
         "brand":"Google Chrome",
         "version":"98"
      }
   ],
   "fullVersionList":[
      {
         "brand":" Not A;Brand",
         "version":"99.0.0.0"
      },
      {
         "brand":"Chromium",
         "version":"98.0.4738.0"
      },
      {
         "brand":"Google Chrome",
         "version":"98.0.4738.0"
      }
   ],
   "mobile":false,
   "model":"",
   "platformVersion":"12.0.1"
}

Demo

Sie können sowohl die Header als auch die JavaScript API auf Ihrem eigenen Gerät unter user-agent-client-hints.glitch.me.

Hinweislebensdauer und Zurücksetzen

Im Accept-CH-Header angegebene Hinweise werden für die Dauer des oder bis ein anderer Satz Hinweise angegeben ist.

Das bedeutet, wenn der Server Folgendes sendet:

⬇️ Antwort

Accept-CH: Sec-CH-UA-Full-Version-List

Der Browser sendet dann bei allen Anfragen den Header Sec-CH-UA-Full-Version-List bis der Browser geschlossen wird.

⬆️ Nachfolgende Ersuchen

Sec-CH-UA-Full-Version-List: " Not A;Brand";v="99.0.0.0", "Chromium";v="98.0.4738.0", "Google Chrome";v="98.0.4738.0"

Wenn jedoch ein anderer Accept-CH-Header empfangen wird, wird die vollständig ersetzen Sie die aktuellen Hinweise, die der Browser sendet.

⬇️ Antwort

Accept-CH: Sec-CH-UA-Bitness

⬆️ Nachfolgende Ersuchen

Sec-CH-UA-Platform: "64"

Die zuvor angefragte Sec-CH-UA-Full-Version-List wird nicht gesendet.

Stellen Sie sich den Accept-CH-Header am besten als Gewünschte Hinweise für diese Seite, d. h. der Browser sendet die angegebenen Hinweise für alle untergeordneten Ressourcen auf dieser Seite. Während Hinweise bis zur nächsten sollte sich die Website nicht verlassen und nicht davon ausgehen, dass sie bereitgestellt werden.

Sie können diese Option auch verwenden, um alle vom Browser gesendeten Hinweise zu löschen. indem Sie in der Antwort ein leeres Accept-CH-Objekt senden. Sie sollten dies irgendwo hinzufügen dass der Nutzer seine Einstellungen zurücksetzt oder sich von Ihrer Website abmeldet.

Dieses Muster stimmt auch mit der Funktionsweise von Hinweisen über die <meta http-equiv="Accept-CH" …>-Tag. Die angeforderten Hinweise werden nur gesendet am Anfragen, die von der Seite und nicht bei einer nachfolgenden Navigation initiiert wurden.

Hinweisbereich und ursprungsübergreifende Anfragen

Client Hints werden standardmäßig nur bei Anfragen desselben Ursprungs gesendet. Das bedeutet, wenn Sie nach bestimmten Tipps für https://example.com fragen, aber die Ressourcen, optimieren möchten, befinden sich auf https://downloads.example.com, nicht Hinweise erhalten.

Damit Hinweise bei ursprungsübergreifenden Anfragen zulässig sind, müssen alle Hinweise und der Ursprung angegeben werden durch einen Permissions-Policy-Header. Um dies auf einen User-Agent-Client-Hint anzuwenden, muss der Hinweis kleingeschrieben und das Präfix sec- entfernt werden. Beispiel:

⬇️ Antwort von example.com

Accept-CH: Sec-CH-UA-Platform-Version, DPR
Permissions-Policy: ch-ua-platform-version=(self "downloads.example.com"),
                    ch-dpr=(self "cdn.provider" "img.example.com");

⬆️ Anfrage an downloads.example.com

Sec-CH-UA-Platform-Version: "10"

⬆️ Anfragen an cdn.provider oder img.example.com

DPR: 2

Wo werden User-Agent-Client-Hints verwendet?

Die schnelle Antwort ist, dass Sie alle Instanzen refaktorieren sollten, entweder im User-Agent-Header oder mithilfe von JavaScript-Aufrufen, dieselben Informationen abrufen (z.B. navigator.userAgent, navigator.appVersion, oder navigator.platform), um stattdessen User-Agent-Client-Hints zu verwenden.

Wenn Sie noch einen Schritt weiter gehen, sollten Sie die Verwendung des User-Agents und ersetzen Sie diese nach Möglichkeit durch andere Methoden. Häufig können Sie erreichen Sie das gleiche Ziel, indem Sie Progressive Enhancement, Funktion oder responsivem Design. Das Hauptproblem bei der Verlässlichkeit der User-Agent-Daten ist, dass Sie Pflegen einer Zuordnung zwischen der untersuchten Eigenschaft und dem Verhalten, ermöglicht. Es ist ein Wartungsaufwand, der dafür sorgt, dass Ihre Erkennung umfassend und aktuell bleibt.

Unter Berücksichtigung dieser Vorbehalte sind im User-Agent-Client-Hint-Repository einige gültige Anwendungsfälle für Websites aufgeführt.

Was passiert mit dem User-Agent-String?

Ziel ist es, die Möglichkeiten für verdecktes Tracking im Web zu minimieren, indem Die Menge an Informationen zur Identifizierung, die durch den vorhandenen User-Agent-String offengelegt werden während bestehende Websites nicht zu stark beeinträchtigt werden. Der neue User-Agent Mit Client Hints können Sie jetzt die neuen Funktionen bevor Änderungen an User-Agent-Strings vorgenommen werden.

Letztendlich werden die Informationen im User-Agent-String reduziert, und gleichzeitig den gleichen High-Level-Browser und Versionsinformationen gemäß den Standardhinweisen. In Chromium wurde diese Änderung mindestens 2022 aufgeschoben werden, um dem Ökosystem mehr Zeit zu geben, die neuen Funktionen von User-Agent-Client-Hints testen.

Sie können eine Version testen, indem Sie den Flag about://flags/#reduce-user-agent von Chrome 93 (Hinweis: Dieses Flag war mit dem Namen about://flags/#freeze-user-agent in den Versionen Chrome 84 bis 92). Dadurch wird aus Kompatibilitätsgründen einen String mit den bisherigen Einträgen zurückgeben, aber mit bereinigten Besonderheiten. Zum Beispiel in etwa:

Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36

Thumbnail von Sergey Zolkin am Unsplash