Cho phép nhà phát triển chọn cookie sử dụng bộ nhớ "được phân vùng", với một kho cookie riêng cho mỗi trang web cấp cao nhất.
Trạng thái triển khai
- Được hỗ trợ theo mặc định trong Chrome 114 trở lên.
- Bản dùng thử theo nguyên gốc hiện đã hoàn tất từ Chrome 100 đến 116.
- Đọc Ý định thử nghiệm và Ý định giao hàng.
CHIPS là gì?
Cookie có trạng thái phân vùng độc lập (CHIPS) cho phép nhà phát triển thêm cookie vào bộ nhớ được phân vùng, với các kho cookie riêng cho mỗi trang web cấp cao nhất, nhờ đó cải thiện quyền riêng tư và tính bảo mật của người dùng.
Cookie của bên thứ ba có thể cho phép các dịch vụ theo dõi người dùng và kết hợp thông tin của họ từ nhiều trang web cấp cao nhất không liên quan mà không cần phân vùng. Tính năng này được gọi là theo dõi trên nhiều trang web.
Các trình duyệt cũng đang trong quá trình loại bỏ cookie của bên thứ ba chưa được phân vùng, vì vậy, CHIPS, API Truy cập bộ nhớ và Bộ trang web có liên quan sẽ là cách duy nhất để đọc và ghi cookie từ ngữ cảnh trên nhiều trang web, chẳng hạn như iframe, khi cookie của bên thứ ba bị chặn.
CHIPS giới thiệu một thuộc tính cookie mới là Partitioned
để hỗ trợ các cookie trên nhiều trang web được phân vùng theo ngữ cảnh cấp cao nhất.
Tiêu đề Set-Cookie:
Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned;
JavaScript:
document.cookie="__Host-name=value; Secure; Path=/; SameSite=None; Partitioned;"
Cookie của bên thứ ba được phân vùng được liên kết với trang web cấp cao nhất mà bạn đặt cookie này ban đầu và không thể truy cập từ nơi khác. Bằng cách này, bạn chỉ có thể đọc các cookie do dịch vụ của bên thứ ba đặt trong cùng ngữ cảnh được nhúng của trang web cấp cao nhất nơi các cookie này được đặt ban đầu.
Với cookie được phân vùng, khi người dùng truy cập vào trang web A và nội dung được nhúng từ trang web C đặt cookie có thuộc tính Được phân vùng, cookie này sẽ được lưu trong một tệp jar được phân vùng, chỉ được chỉ định cho các cookie mà trang web C đặt khi được nhúng vào trang web A. Trình duyệt sẽ chỉ gửi cookie đó khi trang web cấp cao nhất là A.
Khi người dùng truy cập vào một trang web mới, ví dụ như trang web B, khung C nhúng sẽ không nhận được cookie đã đặt khi C được nhúng vào trang web A.
Nếu người dùng truy cập vào trang web C dưới dạng trang web cấp cao nhất, thì cookie được phân vùng mà C đặt khi được nhúng trong A cũng sẽ không được gửi trong yêu cầu đó.
Trường hợp sử dụng
Ví dụ: trang web retail.example
có thể cần hợp tác với support.chat.example
của dịch vụ bên thứ ba để nhúng hộp trò chuyện hỗ trợ vào trang web đó. Nhiều dịch vụ trò chuyện có thể nhúng ngày nay dựa vào cookie để lưu trạng thái.
Nếu không có khả năng đặt cookie trên nhiều trang web, support.chat.example
sẽ cần tìm các phương thức thay thế và thường phức tạp hơn để lưu trữ trạng thái. Ngoài ra, bạn cần nhúng mã này vào trang cấp cao nhất. Điều này có thể gây ra rủi ro vì cho phép tập lệnh support.chat.example
có các đặc quyền cấp cao trên Retail.example, chẳng hạn như khả năng truy cập vào cookie xác thực.
CHIPS cung cấp tuỳ chọn dễ dàng hơn để tiếp tục sử dụng cookie trên nhiều trang web mà không gặp phải các rủi ro liên quan đến cookie chưa được phân vùng.
Ví dụ về trường hợp sử dụng CHIPS bao gồm mọi trường hợp trong đó các tài nguyên phụ trên nhiều trang web đòi hỏi một số khái niệm về trạng thái phiên hoặc trạng thái cố định trong phạm vi hoạt động của người dùng trên một trang web cấp cao nhất, chẳng hạn như:
- Nhúng cuộc trò chuyện của bên thứ ba
- Nhúng bản đồ của bên thứ ba
- Nhúng thanh toán của bên thứ ba
- Cân bằng tải CDN của tài nguyên phụ
- Nhà cung cấp CMS không có giao diện người dùng
- Miền hộp cát để phân phát nội dung không đáng tin cậy của người dùng (chẳng hạn như googleusercontent.com và githubusercontent.com)
- Các CDN của bên thứ ba sử dụng cookie để phân phát nội dung được kiểm soát quyền truy cập bằng trạng thái xác thực trên trang web của bên thứ nhất (ví dụ: ảnh hồ sơ trên các trang mạng xã hội được lưu trữ trên CDN của bên thứ ba)
- Khung giao diện người dùng dựa vào API từ xa bằng cookie theo yêu cầu
- Quảng cáo được nhúng cần có trong phạm vi tiểu bang của mỗi nhà xuất bản (ví dụ: nắm bắt lựa chọn ưu tiên của người dùng về quảng cáo cho trang web đó)
Lý do CHIPS sử dụng mô hình phân vùng lựa chọn tham gia
Khi các trình duyệt đang loại bỏ cookie của bên thứ ba chưa được phân vùng, một số phương pháp phân vùng khác đã được thử nghiệm.
Firefox thông báo rằng họ đang phân vùng tất cả cookie của bên thứ ba theo mặc định trong chế độ Nghiêm ngặt ETP và chế độ duyệt web riêng tư, vì vậy, tất cả cookie trên nhiều trang web đều được phân vùng theo trang web cấp cao nhất. Tuy nhiên, việc phân vùng cookie mà không có lựa chọn tham gia của bên thứ ba có thể dẫn đến các lỗi không mong muốn, vì một số dịch vụ của bên thứ ba đã xây dựng các máy chủ dự kiến sẽ có cookie của bên thứ ba không được phân vùng.
Trước đây, Safari đã thử phân vùng cookie dựa trên thông tin phỏng đoán, nhưng cuối cùng đã chọn chặn hoàn toàn chúng và trích dẫn sự nhầm lẫn của các nhà phát triển là một trong những lý do này. Gần đây, Safari bày tỏ sự quan tâm đến mô hình dựa trên lựa chọn tham gia.
Điều làm CHIPS khác biệt với các phương pháp triển khai cookie được phân vùng hiện có là tính năng chọn sử dụng của bên thứ ba. Cookie phải được đặt với thuộc tính mới để được gửi theo yêu cầu giữa nhiều bên khi cookie của bên thứ ba (chưa được phân vùng) đã lỗi thời.
Mặc dù cookie của bên thứ ba vẫn tồn tại, thuộc tính Partitioned
cung cấp lựa chọn tham gia một loại hành vi cookie hạn chế hơn và an toàn hơn. CHIPS là một bước quan trọng giúp các dịch vụ chuyển đổi suôn sẻ sang một tương lai không dùng cookie của bên thứ ba.
Thiết kế kỹ thuật phân vùng cookie
Hiện nay, cookie được khoá trên tên máy chủ hoặc miền của trang web đã đặt cookie, tức là khoá máy chủ lưu trữ của cookie.
Ví dụ: đối với cookie từ https://support.chat.example
, khoá máy chủ là ("support.chat.example")
.
Trong CHIPS, cookie chọn tham gia phân vùng sẽ được nhập hai khoá trên khoá máy chủ lưu trữ và khoá phân vùng.
Khoá phân vùng của cookie là trang web (lược đồ và miền có thể đăng ký) của URL cấp cao nhất mà trình duyệt đã truy cập khi bắt đầu yêu cầu đến điểm cuối đã đặt cookie đó.
Trong ví dụ trước đó, khi https://support.chat.example
được nhúng trên https://retail.example
, URL cấp cao nhất là https://retail.example
.
Khoá phân vùng trong trường hợp đó là ("https", "retail.example")
.
Tương tự, khoá phân vùng của yêu cầu là trang web của URL cấp cao nhất mà trình duyệt đang truy cập khi bắt đầu yêu cầu. Các trình duyệt chỉ được gửi cookie có thuộc tính Partitioned
trong các yêu cầu có cùng khoá phân vùng như cookie đó.
Dưới đây là hình thức của khoá cookie trong ví dụ trước trước và sau CHIPS.
Trước chiPS
key=("support.chat.example")
Sau khi sử dụng CHIPS
key={("support.chat.example"),("https", "retail.example")}
Thiết kế bảo mật
Để khuyến khích các phương pháp bảo mật tốt, với CHIPS, cookie chỉ được thiết lập bởi và được gửi qua các giao thức bảo mật.
- Cookie được phân vùng phải được đặt bằng
Secure
. - Bạn nên dùng tiền tố
__Host
khi thiết lập cookie được phân vùng để liên kết với tên máy chủ (chứ không phải miền có thể đăng ký).
Ví dụ:
Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;
Lựa chọn thay thế cho CHIPS
Storage Access API và Nhóm trang web có liên quan (RWS) được liên kết là các cơ chế nền tảng web để cho phép truy cập giới hạn vào cookie trên nhiều trang web cho các mục đích cụ thể dành cho người dùng.
Đây là các phương án thay thế cho phân vùng CHIPS khi yêu cầu quyền truy cập vào các cooke trên nhiều trang web, không phân vùng.
Hãy cân nhắc sử dụng Storage Access API và Bộ trang web có liên quan trong trường hợp bạn cần có cùng một cookie cho một dịch vụ được nhúng trong nhiều trang web liên quan.
CHIPS cung cấp khả năng để một dịch vụ hoạt động như một thành phần tách biệt trên nhiều trang web, trong đó cùng một cookie không nhất thiết phải xuất hiện trên nhiều trang web. Nếu dịch vụ đặt một cookie được phân vùng, khoá phân vùng của nó sẽ là trang web cấp cao nhất và cookie đó sẽ không có ở những trang web khác cũng sử dụng dịch vụ này.
Thiết kế của tính năng Nhóm trang web có liên quan dựa trên Storage Access API (API Truy cập bộ nhớ) và không tích hợp với tính năng phân vùng CHIPS. Nếu có một trường hợp sử dụng dựa trên phân vùng cookie dùng chung trên các trang web trong RWS, bạn có thể cung cấp ví dụ và ý kiến phản hồi về vấn đề trên GitHub.
Bản minh hoạ
Bản minh hoạ này sẽ hướng dẫn bạn cách hoạt động của cookie được phân vùng và cách bạn có thể kiểm tra cookie trong Công cụ cho nhà phát triển.
Trang web A nhúng iframe từ trang web B. Khung này sử dụng JavaScript để đặt hai cookie: một cookie được phân vùng và không được phân vùng. Trang web B hiển thị tất cả cookie có thể truy cập được từ vị trí đó bằng cách sử dụng document.cookie
.
Khi cookie của bên thứ ba bị chặn, trang web B sẽ chỉ có thể đặt và truy cập vào cookie đó bằng thuộc tính Partitioned
trong ngữ cảnh nhiều trang web.
Khi cookie của bên thứ ba được cho phép, trang web B cũng có thể đặt và truy cập vào cookie không được phân vùng.
Điều kiện tiên quyết
- Chrome 118 trở lên.
- Truy cập vào
chrome://flags/#test-third-party-cookie-phaseout
và bật chế độ cài đặt này
Sử dụng Công cụ cho nhà phát triển để kiểm tra cookie được phân vùng
- Truy cập vào https://chips-site-a.glitch.me.
- Nhấn
Control+Shift+J
(hoặcCommand+Option+J
trên máy Mac) để mở Công cụ cho nhà phát triển. - Nhấp vào thẻ Application (Ứng dụng).
- Chuyển đến Application > Storage > Cookie (Ứng dụng > Bộ nhớ > Cookie).
- Nhấp vào
https://chips-site-b.glitch.me
.
Công cụ cho nhà phát triển sẽ hiển thị tất cả cookie từ nguồn đã chọn.
Trang web B chỉ có thể đặt cookie được phân vùng trong ngữ cảnh nhiều trang web, và cookie không được phân vùng sẽ bị chặn:
- Bạn sẽ thấy
__Host-partitioned-cookie
bằng khoá phân vùng của trang web cấp cao nhấthttps://chips-site-a.glitch.me
.
- Nhấp vào Truy cập vào trang web B.
- Trong Công cụ cho nhà phát triển, hãy chuyển đến Ứng dụng > Bộ nhớ > Cookie.
- Nhấp vào
https://chips-site-b.glitch.me
.
Trong trường hợp này, vì bạn đang ở trang web B trong ngữ cảnh cấp cao nhất nên trang web có thể đặt và truy cập cả hai cookie:
unpartitioned-cookie
có khoá phân vùng trống.- Cookie
__Host-partitioned-cookie
có khoá phân vùnghttps://chips-site-b.glitch.me
.
Nếu bạn quay lại trang web A, thì unpartitioned-cookie
hiện được lưu trữ trong trình duyệt nhưng bạn sẽ không truy cập được vào trang web A này.
- Nhấp vào Truy cập vào trang web A.
- Nhấp vào thẻ Mạng.
- Nhấp vào
https://chips-site-b.glitch.me
. - Nhấp vào thẻ Cookie.
Khi đang truy cập trang web A, bạn sẽ thấy __Host-partitioned-cookie
kèm theo khoá phân vùng của trang web cấp cao nhất https://chips-site-a.glitch.me
.
Nếu bạn chọn hiển thị các yêu cầu cookie đã lọc ra, Công cụ cho nhà phát triển sẽ thấy rằng cookie chưa được phân vùng bị chặn, được đánh dấu bằng màu vàng với chú giải công cụ: "Cookie này đã bị chặn do lựa chọn ưu tiên của người dùng".
Trong Application > Storage > Cookie (Ứng dụng > Bộ nhớ > Cookie), hãy nhấp vào https://chips-site-b.glitch.me
sẽ hiển thị:
unpartitioned-cookie
bằng khoá phân vùng trống.- Cookie
__Host-partitioned-cookie
có khoá phân vùnghttps://chips-site-a.glitch.me
.
Xóa cookie
Để đặt lại bản minh hoạ, hãy xoá tất cả cookie của trang web:
- Nhấn
Control+Shift+J
(hoặcCommand+Option+J
trên máy Mac) để mở Công cụ cho nhà phát triển. - Nhấp vào thẻ Application (Ứng dụng).
- Chuyển đến Application > Storage > Cookie (Ứng dụng > Bộ nhớ > Cookie).
- Nhấp chuột phải vào
https://chips-site-b.glitch.me
. - Nhấp vào Clear (Xoá).
Tài nguyên
- GitHub: Đọc tài liệu giải thích, đặt câu hỏi và theo dõi cuộc thảo luận.
- Hỗ trợ nhà phát triển: Đặt câu hỏi và tham gia thảo luận về kho lưu trữ Hỗ trợ nhà phát triển Hộp cát về quyền riêng tư.