Obniżanie priorytetu nagłówka Accept-Language ma na celu ograniczenie pasywnego tworzenia odcisków palców w witrynach. Polega ono na zmniejszeniu liczby preferencji językowych użytkownika w nagłówku Accept-Language
i wysyłaniu tylko preferowanego języka (tylko jednego).
Zaczynając od wersji Chrome 109 w wersji beta, udostępnimy test źródła dla funkcji redukcji języka w nagłówku Accept, aby umożliwić witrynom akceptowanie otrzymywania tego Accept-Language
nagłówka. Dzięki temu właściciele witryn będą mogli wykrywać i rozwiązywać problemy, zanim ograniczone Accept-Language
stanie się domyślnym zachowaniem w Chrome w przyszłej wersji. Aby przetestować funkcję przed udostępnieniem jej użytkownikom stabilnej wersji, musisz się zarejestrować i przetestować ją przed datą wydania Chrome 109 (obecnie zaplanowaną na 10 stycznia 2023 r.).
Poniżej znajdziesz przykłady nagłówka Accept-Language
przed i po zmniejszeniu.
Accept-Language: en-GB,en;q=0.9,de;q=0.8,fr;q=0.7
Accept-Language: en-GB
Poniżej znajdziesz omówienie testu pochodzenia i informacje o tym, czego możesz się spodziewać. Opinie na temat tej zmiany lub wszelkie problemy, które wystąpią podczas próbnego testowania pochodzenia, możesz przesłać w repertuarze Accept-Language Reduction GitHub.
Co to jest nagłówek Accept-Language?
Ciąg znaków Accept-Language jest udostępniany w każdym żądaniu HTTP i udostępniany w JavaScriptowi wszystkim zasobom wczytywanym przez przeglądarkę. Obecnie zawiera wszystkie preferowane języki użytkownika.
Dlaczego nagłówek Accept-Language jest ściskany?
Obniżanie znaczenia języka w Accept to próba ograniczenia powierzchni odcisków palców w Chrome.
Obecnie nagłówek Accept-Language
jest domyślnie udostępniany w przypadku każdego żądania HTTP i jest dostępny w JavaScript dla wszystkich zasobów wczytywanych przez przeglądarkę. Zawiera wszystkie ustawienia językowe użytkownika. Zamiast wysyłania przez przeglądarkę pełnej listy języków skonfigurowanych przez użytkownika na wypadek, gdyby witryny chciały udostępniać treści w wielu językach, wprowadzamy nowy sposób oznaczania przez witryny treści wielojęzycznych. Przejęcie odpowiedzialności za negocjacje językowe i wyświetlanie preferowanego języka zostanie powierzone przeglądarce.
Innym powodem jest to, że wiele witryn może wcale nie używać nagłówków Accept-Language
do negocjowania języka (na przykład jedno z badań wskazuje, że tylko 7,2% najpopularniejszych witryn używa nagłówka Accept-Language
). Tryb incognito w Chrome już zmniejszył liczbę nagłówków Accept-Language
do 1.
Co to oznacza dla programistów stron internetowych?
Witryny, które korzystają z Accept-Language
do negocjowania języka, powinny przygotować się na ograniczenie Accept-Language
i rozważyć udział w próbnym wdrożeniu origin. Zmniejszone wartości Accept-Language
będą się wyświetlać w tych miejscach:
- Nagłówek żądania HTTP
Accept-Language
. - Właściwość JavaScript
navigator.languages
.
odpowiedzialność za negocjacje językowe i wybór preferowanego języka użytkownika do wysyłania do witryn. Aby to zrobić, witryny muszą dodać 2 nagłówki:
Variants
(nowy nagłówek wskazuje, że witryna obsługuje języki) Accept-Language
i Content-Language
w nagłówku odpowiedzi (patrz szczegółowy przykład poniżej).
Ograniczone pakiety Accept-Language
nie obejmują obecnie iOS i WebView. Na tych platformach nadal będzie wyświetlana pełna lista Accept-Language
.
Obsługa tych platform jest planowana na późniejszy termin.
Testowanie origin w przypadku funkcji Accept-Language Reduction
Wersja próbna wymaga, aby witryna uczestnicząca w programie przekazała w swojej odpowiedzi token, który informuje przeglądarkę, aby włączyła określoną wersję próbną. Oznacza to jednak, że przeglądarka nie może na podstawie początkowego żądania do witryny określić, czy ta bierze udział w próbie. Oznacza to, że pierwotny żądanie w sesji nie będzie wysyłać zmniejszonego Accept-Language header
.
Żądania dotyczące zasobów podrzędnych na tej stronie (zarówno z tego samego pochodzenia, jak i z innego) będą otrzymywać skrócony nagłówek Accept-Language
. Kolejne przejścia w tej samej domenie będą również zawierać skrócony nagłówek Accept-Language
. Nawigacje między domenami będą znów wysyłać pełny nagłówek, a żądania między domenami na stronie (np. żądania iframe firm zewnętrznych) będą nadal wysyłać ograniczony nagłówek Accept-Language
, jeśli żądanie ramki najwyższego poziomu ma prawidłowy token próbny pochodzenia.
Jest to podobne do próbnego wdrożenia redukcji klienta użytkownika. Jeśli chcesz dowiedzieć się więcej o wewnętrznej implementacji Chromium, przeczytaj artykuł Wdrażanie redukcji nagłówka HTTP Accept-Language.
Udział w testach wersji próbnej pochodzenia Accept-Language
Więcej wskazówek znajdziesz w artykule Pierwsze kroki z testowaniem origin w Chrome, ale najważniejsze czynności są opisane poniżej.
Krok 1
Aby zarejestrować się w programie próbnym pochodzenia i uzyskać token dla swoich domen, odwiedź stronę Próbna implementacja funkcji akceptacji języka.
Krok 2
Zaktualizuj nagłówki odpowiedzi HTTP:
- Dodaj
Origin-Trial: <ORIGIN TRIAL TOKEN>
do nagłówka odpowiedzi HTTP, gdzie <ORIGIN TRIAL TOKEN
> zawiera token uzyskany podczas rejestracji na okres próbny. - Dodaj nagłówek
Content-Language
do odpowiedzi HTTP, aby wskazać języki przeznaczone dla odbiorców. - Dodaj
Variants
do nagłówka odpowiedzi HTTP, aby wskazać języki obsługiwane przez witrynę. - [Opcjonalnie] Dodaj
Vary: Accept-Language
do odpowiedzi HTTP, aby utworzyć klucz pamięci podręcznej do negocjowania treści. - Ustawienie tych nagłówków spowoduje tylko negocjację języka przeglądarki (potencjalny restart dla początkowego żądania) w przypadku danego źródła. Aby witryny wyświetlały użytkownikom treści w odpowiednim języku, musisz też zaktualizować witryny wysyłające treści na podstawie nagłówka Accept-Language w zapytaniu użytkownika (patrz przykład poniżej).
Krok 3
Załaduj swoją witrynę w Chrome M109 Beta (lub nowszej) i zacznij otrzymywać skrócony ciąg znaków Accept-Language.
Wszelkie problemy lub opinie możesz przesyłać do repozytorium GitHub związanego z ograniczaniem nagłówka Accept-Language.
Prezentacja
Demonstrację wielojęzycznej witryny, która wzięła udział w próbnej wersji źródłowej (wraz z kodem źródłowym), znajdziesz na stronie https://reduce-accept-language.glitch.me/.
Demonstrację opcji akceptacji i rezygnacji z okresu próbnego (wraz z kodem źródłowym) znajdziesz na stronie https://reduce-accept-language-ot.glitch.me/.
Na przykład example.com
obsługuje ja
(język japoński) i en
(język angielski). Prośba może być:
GET / HTTP/1.1
Host: example.com
Accept-Language: en
Witryna wie, że użytkownik preferuje treści w języku angielskim na podstawie jego preferencji językowych. Nagłówki odpowiedzi mogą zawierać:
HTTP/1.1 200 OK
Content-Language: en
Variants: Accept-Language=(en ja)
Origin-Token: a-valid-token
Jeśli użytkownik preferuje treści w języku japońskim, żądanie będzie wyglądać tak:
GET / HTTP/1.1
Host: example.com
Accept-Language: ja
W tym przypadku witryna zwraca nagłówki treści w języku japońskim:
HTTP/1.1 200 OK
Content-Language: ja
Variants: Accept-Language=(en ja)
Origin-Token: a-valid-token
Na stronie serwera witryna może szukać obsługi określonego języka, ale w przeciwnym razie wróci do domyślnej:
if(accept_language == 'ja') {
res.response('ja_page')
}
else {
res.response('en_page')
}
W powyższym przykładzie funkcja example.com
zwraca wartość en
lub ja
w zależności od wartości parametru Accept-Language
. Jeśli nie ma dopasowania, domyślnie zwracana jest wartość en
. W takim przypadku witryna może też przekierowywać użytkowników do odpowiednich stron w danym języku (/en
lub /ja
) na podstawie wartości Accept-Language
. Szczegółowe przykłady dotyczące przekierowań znajdziesz w dokumentacji dotyczącej implementacji.
Pomoc w przypadku wersji próbnej pochodzącej od zewnętrznego dostawcy
Obecnie nie obsługujemy rejestrowania domen jako domeny zewnętrznej na potrzeby okresu próbnego.
Jeśli zarządzasz usługą, która jest implementowana jako subresurs w różnych źródłach (np. wyświetlanie reklam lub usługa analityczna), skrócony nagłówek Accept-Language
otrzymasz tylko wtedy, gdy witryna najwyższego poziomu bierze udział w teście.
Sprawdzanie, czy okres próbny pochodzenia działa
Przewodnik na temat rozwiązywania problemów z testami pochodzenia w Chrome zawiera pełną listę kontrolną, która pomoże Ci sprawdzić, czy token jest prawidłowo skonfigurowany.
Wiele języków i ich priorytety możesz skonfigurować w sekcji chrome://settings/languages
lub Ustawienia → Języki. Rozważ wybranie języka, którego Twoja witryna nie obsługuje, i przeniesienie go na początek listy, aby wywołać dodatkową renegocjację.
Nagłówki początkowej odpowiedzi zawierające token okresu próbnego źródła powinny wyglądać tak:

Kolejne nagłówki żądań zawierające ograniczony nagłówek Accept-Language mają postać:

Przestań uczestniczyć w okresie próbnym Origin
W dowolnym momencie okresu próbnego możesz zrezygnować z usługi i otrzymać pełną listę wartości nagłówka Accept-Language użytkownika. Aby zrezygnować z udziału:
- Usuń nagłówek
Origin-Trial
z testu ograniczania nagłówka Accept-Language z odpowiedzi HTTP. - [Opcjonalnie] Usuń nagłówek
Variants
, który jest dodawany do odpowiedzi HTTP w ramach testu źródła, jeśli nie chcesz wysyłać tego nagłówka. Aby to zrobić, możesz też użyć wartości pustejVariants
. - [Opcjonalnie] Usuń nagłówek
Content-Language
, który jest dodawany do odpowiedzi HTTP w ramach testu źródła, jeśli nie chcesz go wysyłać.
Czas trwania wersji próbnej Origin
Testowanie origin ograniczonego zakresu języka w zapytaniu Accept-Language potrwa co najmniej 6 miesięcy, co odpowiada około 6 milestone’om Chrome. Testowanie origin pojawi się w wersji M109 i zakończy się w wersji M114 (czyli ostatniej wersji Chrome, w której testowanie jest dostępne). W tym momencie Chrome oceni informacje zwrotne z testu pochodzenia, a potem prześle skrócony ciąg znaków Accept-Language w sposób fazowany: najpierw skróci nagłówek HTTP Accept-Language, a potem interfejs JS. Jeśli witryna potrzebuje więcej czasu na przetestowanie, może wziąć udział w kolejnych testach wersji źródłowej, które pozwolą jej korzystać z pełnego ciągu Accept-Language przez co najmniej kolejne 6 miesięcy. Gdy będzie gotowa, opublikujemy więcej informacji na temat okresu testowego.
Podziel się opinią
Wszelkie problemy lub opinie możesz przesyłać do repozytorium GitHub związanego z ograniczaniem nagłówka Accept-Language.