Eine Reihe von Client-Hinweis-Headern ermöglicht es Websites, die Medieneinstellungen des Nutzers optional zum Zeitpunkt der Anfrage abzurufen. So können Server aus Leistungsgründen das richtige CSS inline einfügen.
CSS-Medienabfragen und insbesondere Medienfunktionen der Nutzerpräferenz wie prefers-color-scheme
oder prefers-reduced-motion
haben potenziell erhebliche Auswirkungen auf die Menge an CSS, die von einer Seite bereitgestellt werden muss, und auf die Nutzererfahrung beim Laden der Seite.
Wenn Sie den Schwerpunkt auf prefers-color-scheme
legen, aber hervorheben, dass die Begründung auch für andere Medienfunktionen der Nutzerpräferenz gilt, sollten Sie CSS für das spezifische, nicht übereinstimmende Farbschema im kritischen Rendering-Pfad nicht laden, sondern anfangs nur den aktuell relevanten CSS-Code laden. Eine Möglichkeit dazu ist über <link media>
.
Stark frequentierte Websites wie die Google Suche, die Medienfunktionen der Nutzerpräferenz wie prefers-color-scheme
und Inline-CSS aus Leistungsgründen berücksichtigen möchten, müssen jedoch idealerweise zum Zeitpunkt der Anfrage über das bevorzugte Farbschema (oder andere Medienfunktionen der Nutzerpräferenz) Bescheid wissen, damit in der anfänglichen HTML-Nutzlast bereits das richtige CSS enthalten ist.
Außerdem, insbesondere bei prefers-color-scheme
, sollten Websites auf jeden Fall ein Aufblinken eines falschen Farbdesigns vermeiden.
Die Sec-CH-Prefers-Color-Scheme
- und Sec-CH-Prefers-Reduced-Motion
-Clienthinweisheader sind die ersten einer Reihe von Clienthinweisheadern zu Nutzerpräferenzen für Medienfunktionen, mit denen dieses Problem behoben werden soll.
Hintergrundinformationen zu Clienthinweisen
HTTP-Client-Hinweise definieren einen Accept-CH
-Antwortheader, mit dem Server die Verwendung von Anfrageheadern für die proaktive Inhaltsverhandlung bekanntgeben können. Diese werden umgangssprachlich auch als Clienthinweise bezeichnet. Der Vorschlag Client Hints Headers für Nutzerpräferenzen für Medienfunktionen definiert eine Reihe von Clienthinweisen zur Vermittlung von Medienfunktionen der Nutzerpräferenz. Diese Clienthinweise sind nach der entsprechenden Medienfunktion für Nutzereinstellungen benannt, für die sie Berichte erstellen.
Das aktuell bevorzugte Farbschema gemäß prefers-color-scheme
wird beispielsweise über den gut benannten Sec-CH-Prefers-Color-Scheme
-Clienthinweis gemeldet.
Hintergrundinformationen zu wichtigen Kundenhinweisen
Die in den Headern für Client-Hinweise zu Nutzereinstellungen für Medienfunktionen vorgeschlagenen Clienthinweise werden voraussichtlich am häufigsten als Critical Client Hints verwendet. Kritische Clienthinweise sind Clienthinweise, die die resultierende Ressource erheblich ändern. Eine solche Ressource sollte beim Seitenaufbau konsistent abgerufen werden (einschließlich des initial Seitenaufbaus), um irritierte Schalter für den Nutzer zu vermeiden.
Client-Hinweissyntax
Medienfunktionen der Nutzerpräferenz bestehen aus einem Namen (z. B. prefers-reduced-motion
) und zulässigen Werten (z. B. no-preference
oder reduce
). Jedes Header-Feld des Clienthinweiss wird als Structured Headers for HTTP-Objekt dargestellt, das ein Element enthält, dessen Wert ein String ist. Um beispielsweise zu vermitteln, dass der Nutzer ein dunkles Design und weniger Bewegung bevorzugt, sehen die Client-Hinweise im folgenden Beispiel aus.
GET / HTTP/2
Host: example.com
Sec-CH-Prefers-Color-Scheme: "dark"
Sec-CH-Prefers-Reduced-Motion: "reduce"
Die CSS-Entsprechung zu den in den obigen Clienthinweisen vermittelten Informationen ist @media (prefers-color-scheme: dark) {}
bzw. @media (prefers-reduced-motion: reduce) {}
.
Vollständige Liste der Clienthinweise
Die Liste der Clienthinweise ist den Medienfunktionen der Nutzerpräferenz in Medienabfrageebene 5 modelliert.
Kundenhinweis | Zulässige Werte | Entsprechende Medienfunktion für Nutzerpräferenzen |
---|---|---|
Sec-CH-Prefers-Reduced-Motion |
no-preference , reduce |
prefers-reduced-motion |
Sec-CH-Prefers-Reduced-Transparency |
no-preference , reduce |
prefers-reduced-transparency |
Sec-CH-Prefers-Contrast |
no-preference , less , more , custom |
prefers-contrast |
Sec-CH-Forced-Colors |
active , none |
forced-colors |
Sec-CH-Prefers-Color-Scheme |
light , dark |
prefers-color-scheme |
Sec-CH-Prefers-Reduced-Data |
no-preference , reduce |
prefers-reduced-data |
Unterstützte Browser
Der Sec-CH-Prefers-Color-Scheme
-Client-Hinweisheader wird in Chromium 93 unterstützt.
Der Sec-CH-Prefers-Reduced-Motion
-Client-Hinweisheader wird in Chromium 108 unterstützt.
Das Feedback anderer Anbieter, insbesondere von WebKit und Mozilla, steht noch aus.
Demo von Sec-CH-Prefers-Color-Scheme
Sehen Sie sich die Demo in Chromium 93 an und beobachten Sie, wie sich das Inline-CSS an das bevorzugte Farbschema des Nutzers anpasst.
Demo von Sec-CH-Prefers-Reduced-Motion
Sieh dir die Demo in Chromium 108 an und beobachte, wie sich der Inline-CSS-Code je nach Bewegungseinstellungen des Nutzers ändert.
Funktionsweise
- Der Client stellt eine erste Anfrage an den Server.
bash GET / HTTP/2 Host: example.com
- Der Server antwortet und teilt dem Client über
Accept-CH
mit, dass er dieSec-CH-Prefers-Color-Scheme
- und dieSec-CH-Prefers-Contrast
-Client-Hinweise akzeptiert. Von diesen wirdSec-CH-Prefers-Color-Scheme
gemäßCritical-CH
als kritischer Client-Hinweis eingestuft, dass auch die vonVary
übermittelte Antwort variiert.bash HTTP/2 200 OK Content-Type: text/html Accept-CH: Sec-CH-Prefers-Color-Scheme, Sec-CH-Prefers-Contrast Vary: Sec-CH-Prefers-Color-Scheme Critical-CH: Sec-CH-Prefers-Color-Scheme
- Der Client wiederholt dann die Anfrage und teilt dem Server über
Sec-CH-Prefers-Color-Scheme
mit, dass er eine Nutzereinstellung für Inhalte mit Dark-Schemata hat.bash GET / HTTP/2 Host: example.com Sec-CH-Prefers-Color-Scheme: "dark"
- Der Server kann dann die Antwort entsprechend an die Präferenzen des Clients anpassen und beispielsweise das für das dunkle Design zuständige CSS im Antworttext einbetten.
Node.js-Beispiel
Das folgende Node.js-Beispiel, das für das beliebte Express.js-Framework geschrieben wurde, zeigt, wie der Umgang mit dem Sec-CH-Prefers-Color-Scheme
-Clienthinweisheader in der Praxis aussehen könnte.
Dieser Code wird für die Demo oben verwendet.
app.get("/", (req, res) => {
// Tell the client the server accepts the `Sec-CH-Prefers-Color-Scheme` client hint…
res.set("Accept-CH", "Sec-CH-Prefers-Color-Scheme");
// …and that the server's response will vary based on its value…
res.set("Vary", "Sec-CH-Prefers-Color-Scheme");
// …and that the server considers this client hint a _critical_ client hint.
res.set("Critical-CH", "Sec-CH-Prefers-Color-Scheme");
// Read the user's preferred color scheme from the headers…
const prefersColorScheme = req.get("sec-ch-prefers-color-scheme");
// …and send the adequate HTML response with the right CSS inlined.
res.send(getHTML(prefersColorScheme));
});
Datenschutz und Sicherheit
Das Chromium-Team hat die Hinweis-Header für die bevorzugten Medienfunktionen für Nutzer anhand der unter Zugriff auf leistungsstarke Webplattformfunktionen steuern definierten grundlegenden Prinzipien wie Nutzersteuerung, Transparenz und Ergonomie entwickelt und implementiert.
Die Sicherheitsaspekte von HTTP-Clienthinweisen und die Sicherheitsaspekte der Zuverlässigkeit von Clienthinweisen gelten gleichermaßen für dieses Angebot.
Verweise
- Entwurf der Spezifikation
- Erklärung
- Sec-CH-Prefers-Color-Scheme – Chrome-Statuseintrag
- Sec-CH-Prefers-Color-Scheme – Chromium-Programmfehler
- Sec-CH-Prefers-Reduced-Motion – Chrome-Statuseintrag
- Sec-CH-Prefers-Reduced-Motion – Chromium-Programmfehler
- WebKit-Thread
- Position der Mozilla-Standards
- Kundenhinweise
- Zuverlässigkeit von Clienthinweisen
- Medienabfragen – Stufe 5
- Strukturierte Header für HTTP
Danksagungen
Vielen Dank für dein wertvolles Feedback und die Ratschläge von Yoav Weiss. Hero-Image von Tdadamemd auf Wikimedia Commons