Giảm Accept-Language là một nỗ lực nhằm giảm các nền tảng tạo vân tay thụ động bằng cách giảm lựa chọn ưu tiên về ngôn ngữ của người dùng trong tiêu đề Accept-Language
và chỉ gửi ngôn ngữ mà người dùng ưu tiên nhất (chỉ một ngôn ngữ).
Kể từ phiên bản thử nghiệm Chrome 109, chúng tôi sẽ mở ra dùng thử theo nguyên gốc cho tính năng Giảm Accept-Language, cho phép các trang web chọn nhận tiêu đề Accept-Language
rút gọn. Điều này sẽ cho phép các trang web phát hiện và khắc phục sự cố trước khi Accept-Language
giảm trở thành hành vi mặc định trong Chrome trong một bản phát hành trong tương lai. Để kiểm thử tính năng này trước khi phát hành cho nhóm người dùng ổn định, hãy nhớ chọn sử dụng và kiểm thử trước ngày phát hành Chrome 109 (hiện được lên lịch vào ngày 10 tháng 1 năm 2023).
Hãy xem các ví dụ về tiêu đề Accept-Language
trước và sau khi giảm kích thước bên dưới.
Accept-Language: en-GB,en;q=0.9,de;q=0.8,fr;q=0.7
Accept-Language: en-GB
Dưới đây là thông tin tổng quan về thử nghiệm theo nguyên gốc và những điều bạn có thể mong đợi. Bạn có thể chia sẻ ý kiến phản hồi về thay đổi này hoặc bất kỳ vấn đề nào bạn gặp phải trong quá trình thử nghiệm theo nguyên gốc trong kho lưu trữ GitHub về việc Giảm ngôn ngữ chấp nhận.
Accept-Language là gì?
Chuỗi Accept-Language được chia sẻ trên mọi yêu cầu HTTP và hiển thị trong JavaScript cho tất cả tài nguyên do trình duyệt tải. Hiện tại, danh sách này chứa tất cả ngôn ngữ mà người dùng ưu tiên.
Tại sao chúng tôi sẽ giảm Accept-Language?
Giảm Accept-Language là một nỗ lực nhằm giảm các nền tảng vân tay thụ động trong Chrome.
Hiện tại, tiêu đề Accept-Language
được chia sẻ theo mặc định trên mọi yêu cầu HTTP và hiển thị trong JavaScript cho tất cả tài nguyên do trình duyệt tải. Tệp này chứa tất cả các lựa chọn ưu tiên về ngôn ngữ của người dùng. Thay vì trình duyệt gửi danh sách đầy đủ các ngôn ngữ mà người dùng đã định cấu hình trong trường hợp các trang web muốn cung cấp nội dung đa ngôn ngữ, chúng tôi sẽ giới thiệu một cách mới để các trang web cho biết nội dung đa ngôn ngữ và trình duyệt sẽ chịu trách nhiệm đàm phán ngôn ngữ và hiển thị ngôn ngữ ưu tiên.
Một lý do khác là nhiều trang web có thể không sử dụng tiêu đề Accept-Language
để đàm phán ngôn ngữ (ví dụ: một nghiên cứu cho thấy chỉ 7,2% trong số 10.000 trang web hàng đầu sử dụng Accept-Language
). Chế độ ẩn danh của Chrome đã giảm Accept-Language
xuống còn một.
Điều này có ý nghĩa gì đối với nhà phát triển web?
Những trang web dựa vào Accept-Language
để đàm phán ngôn ngữ nên chuẩn bị để nhận Accept-Language
giảm và cân nhắc tham gia thử nghiệm theo nguyên gốc. Các giá trị Accept-Language
giảm sẽ xuất hiện trong:
- Tiêu đề yêu cầu HTTP
Accept-Language
. - Phương thức getter JavaScript
navigator.languages
.
Trình duyệt sẽ chịu trách nhiệm đàm phán ngôn ngữ để chọn ngôn ngữ mà người dùng ưu tiên gửi đến các trang web. Để thực hiện việc này, các trang web cần thêm hai tiêu đề Variants
(một tiêu đề mới cho biết các trang web hỗ trợ ngôn ngữ) Accept-Language
và Content-Language
vào tiêu đề phản hồi (xem ví dụ chi tiết bên dưới).
Các gói Accept-Language
bị giảm hiện không bao gồm iOS và WebView, đồng thời các nền tảng đó sẽ tiếp tục nhận được danh sách đầy đủ Accept-Language
của người dùng.
Chúng tôi dự định sẽ hỗ trợ các nền tảng này sau này.
Bản dùng thử theo nguyên gốc cho tính năng Giảm Accept-Language
Thử nghiệm theo nguồn gốc yêu cầu trang web tham gia cung cấp một mã thông báo trong phản hồi để yêu cầu trình duyệt bật thử nghiệm đã chỉ định. Tuy nhiên, điều này có nghĩa là trên yêu cầu ban đầu của trình duyệt gửi đến trang web, trình duyệt không có cách nào để biết liệu trang web đó có đang tham gia thử nghiệm nguồn gốc hay không. Điều này có nghĩa là yêu cầu ban đầu trong một phiên sẽ không gửi Accept-Language header
đã giảm.
Các yêu cầu về tài nguyên phụ trong trang đó, cả cùng nguồn gốc và khác nguồn gốc, sẽ nhận được tiêu đề Accept-Language
rút gọn. Các thao tác điều hướng tiếp theo có cùng nguồn gốc cũng sẽ nhận được tiêu đề Accept-Language
đã giảm. Các thao tác điều hướng trên nhiều nguồn gốc sẽ quay lại gửi tiêu đề đầy đủ, trong khi các yêu cầu trên nhiều nguồn gốc trong trang (chẳng hạn như yêu cầu iframe của bên thứ ba) sẽ vẫn gửi tiêu đề Accept-Language
rút gọn nếu yêu cầu khung cấp cao nhất có mã thông báo thử nghiệm nguồn gốc hợp lệ.
Điều này tương tự như thử nghiệm giảm thông tin trong trường tác nhân người dùng. Nếu muốn tìm hiểu thêm về cách triển khai Chromium nội bộ, bạn có thể đọc thêm trong phần Triển khai giảm tiêu đề HTTP Accept-Language.
Tham gia thử nghiệm theo nguyên gốc Giảm ngôn ngữ được chấp nhận
Bạn có thể đọc thêm hướng dẫn trong bài viết Bắt đầu sử dụng bản dùng thử theo nguyên gốc của Chrome, nhưng các bước cần thiết được trình bày dưới đây.
Bước 1
Để đăng ký dùng thử phiên bản gốc và nhận mã thông báo cho các miền của bạn, hãy truy cập trang Dùng thử tính năng Giảm ngôn ngữ được chấp nhận.
Bước 2
Cập nhật tiêu đề phản hồi HTTP:
- Thêm
Origin-Trial: <ORIGIN TRIAL TOKEN>
vào tiêu đề phản hồi HTTP, trong đó <ORIGIN TRIAL TOKEN
> chứa mã thông báo mà bạn nhận được khi đăng ký bản dùng thử theo nguyên gốc. - Thêm
Content-Language
vào tiêu đề phản hồi HTTP để cho biết(các) ngôn ngữ dành cho đối tượng. - Thêm
Variants
vào tiêu đề phản hồi HTTP để cho biết các ngôn ngữ được hỗ trợ của trang web. - [Không bắt buộc] Thêm
Vary: Accept-Language
vào phản hồi HTTP để tạo khoá bộ nhớ đệm cho việc đàm phán nội dung. - Việc đặt các tiêu đề đó sẽ chỉ kích hoạt quá trình đàm phán ngôn ngữ trình duyệt (có thể khởi động lại yêu cầu ban đầu) cho nguồn gốc đã cho. Để các trang web hiển thị nội dung bằng ngôn ngữ chính xác cho người dùng, bạn cũng cần cập nhật các trang web gửi nội dung dựa trên tiêu đề Accept-Language của người dùng (xem ví dụ bên dưới).
Bước 3
Tải trang web của bạn trong Chrome M109 Beta (hoặc phiên bản mới hơn) và bắt đầu nhận chuỗi Accept-Language rút gọn.
Gửi mọi vấn đề hoặc ý kiến phản hồi đến kho lưu trữ GitHub về việc giảm Accept-Language.
Bản minh hoạ
Để xem minh hoạ về một trang web đa ngôn ngữ đã chọn tham gia thử nghiệm theo nguyên gốc (cùng với mã nguồn), hãy xem https://reduce-accept-language.glitch.me/.
Để xem minh hoạ cách chọn tham gia và chọn không tham gia thử nghiệm gốc (cùng với mã nguồn), hãy xem https://reduce-accept-language-ot.glitch.me/.
Ví dụ: example.com
hỗ trợ ja
(tiếng Nhật) và en
(tiếng Anh). Yêu cầu có thể là:
GET / HTTP/1.1
Host: example.com
Accept-Language: en
Trang web biết người dùng ưu tiên nội dung bằng tiếng Anh dựa trên ngôn ngữ chấp nhận của người dùng. Các tiêu đề phản hồi có thể bao gồm:
HTTP/1.1 200 OK
Content-Language: en
Variants: Accept-Language=(en ja)
Origin-Token: a-valid-token
Nếu người dùng ưu tiên nội dung bằng tiếng Nhật, thì yêu cầu sẽ là:
GET / HTTP/1.1
Host: example.com
Accept-Language: ja
Trong trường hợp này, trang web phản hồi bằng các tiêu đề cho nội dung tiếng Nhật:
HTTP/1.1 200 OK
Content-Language: ja
Variants: Accept-Language=(en ja)
Origin-Token: a-valid-token
Ở phía máy chủ, trang web có thể đang tìm kiếm tính năng hỗ trợ ngôn ngữ cụ thể nhưng sẽ quay lại chế độ mặc định nếu không phát hiện thấy tính năng hỗ trợ nào:
if(accept_language == 'ja') {
res.response('ja_page')
}
else {
res.response('en_page')
}
Trong ví dụ trên, example.com
phản hồi en
hoặc ja
dựa trên giá trị Accept-Language
, mặc định là en
nếu không có giá trị nào khớp. Trong trường hợp này, trang web cũng có thể cung cấp lệnh chuyển hướng đến các trang ngôn ngữ tương ứng /en
hoặc /ja
dựa trên giá trị Accept-Language
. Xem các ví dụ chi tiết liên quan đến lệnh chuyển hướng trên tài liệu triển khai.
Hỗ trợ bản dùng thử theo nguyên gốc của bên thứ ba
Chúng tôi hiện không hỗ trợ việc đăng ký miền của bạn dưới tư cách là bên thứ ba để dùng thử.
Nếu vận hành một dịch vụ được triển khai dưới dạng tài nguyên phụ trên các nguồn gốc (chẳng hạn như phân phát quảng cáo hoặc phân tích), bạn sẽ chỉ nhận được tiêu đề Accept-Language
rút gọn nếu trang web cấp cao nhất đang tham gia thử nghiệm nguồn gốc.
Xác thực rằng bản dùng thử theo nguyên gốc đang hoạt động
Hướng dẫn khắc phục sự cố thử nghiệm theo nguồn gốc của Chrome cung cấp danh sách kiểm tra đầy đủ để đảm bảo mã thông báo của bạn được định cấu hình chính xác.
Bạn có thể định cấu hình nhiều ngôn ngữ và mức độ ưu tiên của các ngôn ngữ đó trong chrome://settings/languages
hoặc Cài đặt → Ngôn ngữ. Cân nhắc việc chọn một ngôn ngữ mà trang web của bạn không hỗ trợ và chuyển ngôn ngữ đó lên đầu danh sách để đảm bảo rằng quá trình đàm phán lại bổ sung sẽ được kích hoạt.
Các tiêu đề của phản hồi ban đầu chứa mã thông báo dùng thử gốc sẽ có dạng như sau:

Các tiêu đề yêu cầu tiếp theo chứa Accept-Language đã giảm sẽ có dạng như sau:

Ngừng tham gia chương trình dùng thử theo nguồn gốc
Tại bất kỳ thời điểm nào trong thời gian dùng thử, bạn có thể ngừng tham gia và nhận danh sách đầy đủ các ngôn ngữ mà người dùng chấp nhận. Cách ngừng tham gia:
- Xoá tiêu đề
Origin-Trial
cho thử nghiệm Giảm ngôn ngữ chấp nhận được khỏi phản hồi HTTP. - [Không bắt buộc] Xoá tiêu đề
Variants
được thêm vào để chọn tham gia thử nghiệm theo nguyên gốc trong phản hồi HTTP nếu bạn không muốn gửi tiêu đề này. Bạn cũng có thể sử dụngVariants
với giá trị trống để thực hiện việc này. - [Không bắt buộc] Xoá tiêu đề
Content-Language
được thêm vào để chọn tham gia thử nghiệm về nguồn gốc trong phản hồi HTTP nếu bạn không muốn gửi tiêu đề này.
Thời gian dùng thử theo nguyên gốc
Bản dùng thử theo nguyên gốc Giảm ngôn ngữ được chấp nhận sẽ chạy trong ít nhất 6 tháng, tương ứng với khoảng 6 mốc quan trọng của Chrome. Bản dùng thử theo nguyên gốc sẽ xuất hiện trong phiên bản M109 và kết thúc bằng phiên bản M114 (tức là bản phát hành Chrome gần đây nhất có bản dùng thử). Tại thời điểm đó, Chrome sẽ đánh giá ý kiến phản hồi từ thử nghiệm gốc trước khi tiếp tục gửi chuỗi Accept-Language đã giảm theo từng giai đoạn: trước tiên, giảm tiêu đề HTTP Accept-Language, sau đó giảm giao diện JS. Nếu cần thêm thời gian để thử nghiệm, trang web có thể chọn tham gia một thử nghiệm về nguồn gốc ngừng sử dụng tiếp theo. Điều này sẽ cho phép họ truy cập vào toàn bộ chuỗi Accept-Language trong ít nhất 6 tháng nữa. Chúng tôi sẽ công bố thêm thông tin chi tiết về bản dùng thử ngừng sử dụng khi bản dùng thử này sẵn sàng.
Chia sẻ ý kiến phản hồi
Gửi mọi vấn đề hoặc ý kiến phản hồi đến kho lưu trữ GitHub về việc giảm Accept-Language.