Zestaw nagłówków wskazówek klienta umożliwia witrynom opcjonalne pobieranie preferencji użytkownika dotyczących multimediów w momencie wysyłania żądania, co pozwala serwerom wstawiać odpowiednie pliki CSS w kod HTML ze względu na wydajność.
Definicje „media” w CSS, a w szczególności funkcje dotyczące preferencji użytkownika, takie jak prefers-color-scheme
lub prefers-reduced-motion
, mogą mieć znaczący wpływ na ilość kodu CSS, który musi być dostarczony przez stronę, oraz na wrażenia użytkownika podczas wczytywania strony.
Skupiając się na prefers-color-scheme
(ale podkreślając, że te same zasady dotyczą innych funkcji mediów dotyczących preferencji użytkownika), zalecamy, aby nie wczytywać kodu CSS dla konkretnego schematu kolorów, który nie pasuje do ścieżki renderowania krytycznego, a zamiast tego początkowo wczytywać tylko kod CSS aktualnie odpowiedni. Jednym ze sposobów jest <link media>
.
Jednak popularne strony, takie jak wyszukiwarka Google, które chcą wyróżnić użytkownika,
preferować funkcje multimedialne, takie jak prefers-color-scheme
,
i wbudowany CSS ze względu na wydajność,
muszą wiedzieć się o preferowanym schemacie kolorów (lub o innych preferencjach multimedialnych dotyczących funkcji)
najlepiej w momencie żądania, by początkowy ładunek HTML miał już wbudowany kod CSS.
Dodatkowo, w szczególności w przypadku prefers-color-scheme
, witryny powinny za wszelką cenę unikać migania nieprawidłowego motywu kolorów.
Nagłówki wskazówek dla klienta Sec-CH-Prefers-Color-Scheme
i Sec-CH-Prefers-Reduced-Motion
są pierwszym elementem
seria nagłówków wskazówek dotyczących funkcji multimedialnych klienta dotyczących ustawień użytkownika
rozwiązania tego problemu.
Wskazówki dotyczące klienta
Wskazówki klienta HTTP definiuje odpowiedź Accept-CH
nagłówek, którego serwery mogą używać do rozgłaszania wykorzystania nagłówków żądań do wyświetlania treści proaktywnych
potocznie nazywane wskazówkami dla klienta.
Preferencje użytkownika – nagłówki wskazówek klienta dotyczących funkcji medialnych
oferta pakietowa definiuje zestaw wskazówek dla klienta, które mają na celu przekazanie informacji o preferencjach użytkownika związanych z multimediami. Te
wskazówki dla klientów są nazywane zgodnie z odpowiednią funkcją multimedialną ustawioną przez użytkownika, której dotyczą.
Na przykład obecnie preferowany schemat kolorów zgodnie z prefers-color-scheme
jest raportowany za pomocą odpowiedniej wskazówki dla klienta o nazwie Sec-CH-Prefers-Color-Scheme
.
Wskazówki dotyczące klienta o znaczeniu krytycznym
Wskazówki klienta zaproponowane w nagłówkach wskazówek klienta dotyczących funkcji mediów z uwzględnieniem preferencji użytkownika będą prawdopodobnie najczęściej używane jako ważne wskazówki klienta. Krytyczne wskazówki klienta to wskazówki dotyczące klienta, które istotnie zmieniają powstały w ten sposób zasób. Taki zasób powinien być pobierany w sposób spójny podczas wczytywania stron (w tym wstępnego wczytania strony), aby uniknąć nieprzyjemnych dla użytkownika zmian.
Składnia wskazówek dla klienta
Funkcje multimedialne związane z preferencjami użytkownika składają się z nazwy (np. prefers-reduced-motion
) i dozwolonych wartości
(np. no-preference
lub reduce
). Każde pole nagłówka wskazówki dla klienta jest reprezentowane przez
Uporządkowane nagłówki HTTP
obiekt zawierający
element, którego wartość
jest ciągiem znaków. Dla:
Aby pokazać, że użytkownik woli ciemny motyw i ograniczony ruch, wskazówki dla klienta
w poniższym przykładzie.
GET / HTTP/2
Host: example.com
Sec-CH-Prefers-Color-Scheme: "dark"
Sec-CH-Prefers-Reduced-Motion: "reduce"
Odpowiednikiem tych informacji w CSS są odpowiednio @media (prefers-color-scheme: dark) {}
i @media (prefers-reduced-motion: reduce) {}
.
Pełna lista wskazówek dotyczących klienta
Lista wskazówek dotyczących klienta jest modelowana na podstawie funkcjami multimedialnymi opartymi na preferencjach użytkownika w Zapytania o multimedia – poziom 5.
Wskazówka dla klienta | Dozwolone wartości | Odpowiadająca funkcja mediów w ustawieniach użytkownika |
---|---|---|
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 |
Obsługa przeglądarek
Nagłówek podpowiedzi klienta Sec-CH-Prefers-Color-Scheme
jest obsługiwany w Chromium 93.
Nagłówek podpowiedzi klienta Sec-CH-Prefers-Reduced-Motion
jest obsługiwany w Chromium 108.
Inni dostawcy opinii, w tym WebKit
i Mozilla są w stanie oczekiwania.
Wersja demonstracyjna: Sec-CH-Prefers-Color-Scheme
Skorzystaj z demo w Chromium 93 i zobacz, jak to działa wbudowany kod CSS zmienia się zgodnie ze schematem kolorów preferowanym przez użytkownika.
Wersja demonstracyjna: Sec-CH-Prefers-Reduced-Motion
Wypróbuj demo w Chromium 108 i zobacz, jak to działa kod CSS w treści zmienia się odpowiednio do preferencji użytkownika dotyczących ruchu.
Jak to działa
- Klient wysyła pierwsze żądanie do serwera.
bash GET / HTTP/2 Host: example.com
- Serwer w odpowiedzi informuje klienta za pomocą interfejsu
Accept-CH
, że akceptujeSec-CH-Prefers-Color-Scheme
orazSec-CH-Prefers-Contrast
Wskazówki dla klienta, w tym zgodnie zCritical-CH
uznaje usługęSec-CH-Prefers-Color-Scheme
za kluczową wskazówkę klienta, że zmienia odpowiedź na przekazywaną przezVary
.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
- Następnie klient ponawia próbę żądania, informując serwer za pomocą interfejsu
Sec-CH-Prefers-Color-Scheme
, że ma preferencje użytkowników dotyczące mrocznych treści.bash GET / HTTP/2 Host: example.com Sec-CH-Prefers-Color-Scheme: "dark"
- Serwer może wtedy dostosować odpowiedź do preferencji klienta i na przykład wstawić do treści odpowiedzi kod CSS odpowiedzialny za ciemny motyw.
Przykład środowiska Node.js
Poniższy przykład środowiska Node.js napisanego na potrzeby popularnej platformy Express.js pokazuje, jak
wykorzystanie nagłówka wskazówki dla klienta Sec-CH-Prefers-Color-Scheme
może wyglądać w praktyce.
Właśnie ten kod jest wykorzystywany w przedstawionej wyżej demo.
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));
});
Kwestie dotyczące prywatności i bezpieczeństwa
Zespół Chromium zaprojektował i wdrożył nagłówki wskazówek klienta dotyczących funkcji multimedialnych funkcji preferencji użytkownika zgodnie z podstawowymi zasadami określonymi w artykule Kontrolowanie dostępu do zaawansowanej platformy internetowej funkcje, w tym kontrola użytkownika, przejrzystość i ergonomia.
Uwagi na temat bezpieczeństwa HTTP Wskazówki klienta i Uwagi na temat bezpieczeństwa dotyczące rzetelności wskazówek klienta.
Pliki referencyjne
- Wersja robocza specyfikacji
- Wyjaśnienie
- Sec-CH-Prefers-Color-Scheme – wpis stanu Chrome
- Sec-CH-Prefers-Color-Scheme – błąd w Chromium
- Sec-CH-Prefers-Reduced-Motion – Wpis stanu Chrome
- Sec-CH-Prefers-Reduced-Motion – błąd w Chromium
- Wątek WebKit
- Stanowisko w standardzie Mozilla
- Wskazówki dla klienta
- Niezawodność wskazówek dotyczących klienta
- Zapytania o multimedia – poziom 5
- Uporządkowane nagłówki HTTP
Podziękowania
Dziękujemy za cenne opinie i porady Yoav Weiss. Baner powitalny, którego autorem jest Tdadamemd Wikimedia Commons