HTTP Client Hints
Client Hints sind eine Gruppe von HTTP-Anforderungsheadern, die ein Server proaktiv von einem Client anfordern kann, um Informationen über das Gerät, das Netzwerk, den Benutzer und benutzerspezifische Agentenpräferenzen zu erhalten. Der Server kann dann entscheiden, welche Ressourcen basierend auf den Informationen, die der Client bereitstellt, gesendet werden sollen.
Die Gruppe der "Hinweis"-Header ist im Thema HTTP-Header aufgelistet und unten zusammengefasst.
Übersicht
Ein Server muss ankündigen, dass er Client Hints unterstützt, indem er den Accept-CH
Header verwendet, um die Hints zu spezifizieren, an denen er interessiert ist. Wenn ein Client, der Client Hints unterstützt, den Accept-CH
Header empfängt, kann er wählen, einige oder alle der aufgelisteten Client Hint Header zu seinen nachfolgenden Anfragen hinzuzufügen.
Zum Beispiel könnte der Client nachfolgend auf Accept-CH
in einer Antwort die Header Width
, Downlink
und Sec-CH-UA
zu allen nachfolgenden Anfragen hinzufügen.
Accept-CH: Width, Downlink, Sec-CH-UA
Dieses Vorgehen ist effizient, da der Server nur die Informationen anfordert, die er sinnvoll verarbeiten kann. Es ist auch relativ "datenschutzfreundlich", da es dem Client überlassen ist, zu entscheiden, welche Informationen er sicher teilen kann.
Es gibt eine kleine Gruppe von Client Hint Headern mit niedriger Entropie, die von einem Client auch dann gesendet werden können, wenn sie nicht angefordert wurden.
Hinweis:
Client Hints können auch in HTML mithilfe des <meta>
Elements mit dem http-equiv
Attribut spezifiziert werden.
<meta http-equiv="Accept-CH" content="Width, Downlink, Sec-CH-UA" />
Caching und Client Hints
Client Hints, die bestimmen, welche Ressourcen in Antworten gesendet werden, sollten generell auch im Vary
Header der betroffenen Antwort enthalten sein. Dies stellt sicher, dass für jeden unterschiedlichen Wert des Hint Headers eine andere Ressource zwischengespeichert wird.
Vary: Accept, Width, ECT
Sie können es vorziehen, Vary
nicht zu spezifizieren oder eine andere Strategie für Client Hint Header zu verwenden, bei denen sich der Wert häufig ändert, da dies die Ressource effektiv uncacheable macht. (Ein neuer Cache-Eintrag wird für jeden eindeutigen Wert erstellt.) Dies gilt insbesondere für Netzwerk-Client-Hints wie Downlink
und RTT
. Für weitere Informationen siehe HTTP Caching > Vary.
Lebensdauer der Hints
Ein Server spezifiziert die Client-Hint-Header, die er gerne erhalten möchte, im Accept-CH
Antwort-Header. Der Benutzeragent fügt die angeforderten Client-Hint-Header, oder zumindest die Untermenge, die er mit diesem Server teilen möchte, allen nachfolgenden Anfragen in der aktuellen Browsersitzung hinzu.
Mit anderen Worten: Die Anforderung für eine bestimmte Gruppe von Hints läuft nicht ab, bis der Browser geschlossen wird.
Ein Server kann die Gruppe der Client-Hints, an denen er interessiert ist, ersetzen, indem er den Accept-CH
Antwort-Header mit einer neuen Liste erneut sendet. Um beispielsweise keine Hints mehr anzufordern, würde er Accept-CH
mit einer leeren Liste senden.
Hinweis:
Die Client-Hints einer bestimmten Herkunft können auch durch das Senden eines Clear-Site-Data: "clientHints"
Antwort-Headers für eine URL innerhalb dieser Herkunft gelöscht werden.
Hints mit niedriger Entropie
Client-Hints werden grob in Hints mit hoher und niedriger Entropie unterteilt. Die Hints mit niedriger Entropie sind diejenigen, die nicht viel Informationen preisgeben, die möglicherweise zur Erstellung eines Fingerabdrucks für einen Benutzer verwendet werden könnten. Sie können standardmäßig bei jeder Client-Anfrage gesendet werden, unabhängig vom Accept-CH
Antwort-Header des Servers, je nach Berechtigungsrichtlinie. Hints mit niedriger Entropie sind:
Hints mit hoher Entropie
Hints mit hoher Entropie sind diejenigen, die potenziell mehr Informationen preisgeben können, die für die Erstellung eines Benutzerfingerabdrucks verwendet werden könnten, und sind daher so gesichert, dass der Benutzeragent entscheiden kann, ob er sie bereitstellt. Die Entscheidung könnte auf Benutzerpräferenzen, einer Berechtigungsanfrage oder der Berechtigungsrichtlinie basieren. Alle Client-Hints, die keine Hints mit niedriger Entropie sind, gelten als Hints mit hoher Entropie.
Kritische Client Hints
Ein kritischer Client Hint ist einer, bei dem die Anwendung der Antwort die gerenderte Seite signifikant verändern kann, möglicherweise auf eine Art und Weise, die störend wirkt oder die Nutzbarkeit beeinflusst, und der daher angewendet werden muss, bevor der Inhalt gerendert wird. Zum Beispiel wird Sec-CH-Prefers-Reduced-Motion
häufig als kritischer Hint behandelt, da er das Verhalten von Animationen merklich beeinflussen könnte und weil ein Benutzer, der diese Präferenz wählt, deren Einstellung benötigt.
Ein Server kann den Critical-CH
Antwort-Header zusammen mit Accept-CH
verwenden, um zu spezifizieren, dass ein akzeptierter Client Hint auch ein kritischer Client Hint ist (ein Header in Critical-CH
muss auch in Accept-CH
erscheinen). Benutzeragenten, die eine Antwort mit Critical-CH
erhalten, müssen überprüfen, ob die angegebenen kritischen Header in der ursprünglichen Anfrage gesendet wurden. Wenn nicht, wird der Benutzeragent die Anfrage erneut versuchen, anstatt die Seite zu rendern. Dieses Vorgehen stellt sicher, dass die mit kritischen Client Hints gesetzten Benutzerpräferenzen immer verwendet werden, auch wenn sie in der ersten Anfrage nicht enthalten sind oder sich die Serverkonfiguration ändert.
Zum Beispiel informiert der Server in diesem Fall einen Client über Accept-CH
, dass er Sec-CH-Prefers-Reduced-Motion
akzeptiert, und Critical-CH
wird verwendet, um zu spezifizieren, dass Sec-CH-Prefers-Reduced-Motion
als kritischer Client Hint betrachtet wird:
HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Sec-CH-Prefers-Reduced-Motion
Vary: Sec-CH-Prefers-Reduced-Motion
Critical-CH: Sec-CH-Prefers-Reduced-Motion
Hinweis:
Wir haben auch Sec-CH-Prefers-Reduced-Motion
im Vary
Header spezifiziert, um dem Browser anzuzeigen, dass sich der bereitgestellte Inhalt basierend auf diesem Header-Wert unterscheidet, selbst wenn die URL gleich bleibt, sodass der Browser nicht einfach eine bestehende zwischengespeicherte Antwort verwenden und stattdessen diese Antwort separat zwischenspeichern sollte. Jeder in Critical-CH
aufgeführte Header sollte auch in den Headern Accept-CH
und Vary
vorhanden sein.
Da Sec-CH-Prefers-Reduced-Motion
ein kritischer Hint ist, der nicht in der ursprünglichen Anfrage enthalten war, versucht der Client die Anfrage automatisch erneut – diesmal teilt er dem Server über Sec-CH-Prefers-Reduced-Motion
mit, dass er eine Benutzerpräferenz für Animationen mit reduzierter Bewegung hat.
GET / HTTP/1.1
Host: example.com
Sec-CH-Prefers-Reduced-Motion: "reduce"
Typen von Hints
User-Agent Client Hints
Header für User-Agent (UA) Client Hints ermöglichen es einem Server, Antworten basierend auf dem User-Agent (Browser), dem Betriebssystem und dem Gerät zu variieren. Für eine Liste von Sec-CH-UA-*
Headern, siehe User-Agent Client Hints Header.
Client Hints sind für JavaScript auf Webseiten über die User Agent Client Hints API verfügbar.
Hinweis:
Server erhalten aktuell die meisten der gleichen Informationen, indem sie den User-Agent
Header analysieren. Aus historischen Gründen enthält dieser Header viele weitgehend irrelevante Informationen und Informationen, die zur Identifizierung eines bestimmten Benutzers verwendet werden könnten. UA Client Hints bieten eine effizientere und datenschutzfreundlichere Möglichkeit, die gewünschten Informationen zu erhalten. Es wird erwartet, dass sie diesen älteren Ansatz letztendlich ersetzen.
Hinweis: User-Agent Client Hints sind innerhalb von abgegrenzten Frames nicht verfügbar, weil sie auf Berechtigungsrichtlinien- Delegierung basieren, die zum Datenaustritt genutzt werden könnte.
Client Hints für Benutzerpräferenz-Medienfeatures
Client Hints für Benutzerpräferenz-Medienfeatures erlauben es einem Server, Antworten basierend auf den Präferenzen eines Benutzeragenten für CSS-Medienfeatures wie Farbschema oder reduzierte Bewegung zu variieren. Zu den Headern gehören: Sec-CH-Prefers-Reduced-Motion
, Sec-CH-Prefers-Color-Scheme
.
Geräte-Client-Hints
Geräte-Client-Hints erlauben es einem Server, Antworten basierend auf den Geräteeigenschaften wie verfügbarem Speicher und Bildschirm-Eigenschaften zu variieren. Zu den Headern gehören: Device-Memory
, Width
, Viewport-Width
.