擁有獨立分割槽狀態的 Cookie (CHIPS)
擁有獨立分割槽狀態的 Cookie (CHIPS,也稱為分割槽 Cookie) 允許開發人員將 Cookie 選項加入到分割槽儲存中,每個頂級網站都有一個獨立的 Cookie 儲存庫。
在沒有 Cookie 分割槽的情況下,第三方 Cookie 可以使服務跟蹤使用者並在不相關的頂級網站之間關聯他們的資訊。標記為Partitioned的 Cookie 使用雙重鍵:由設定它們的來源和頂級頁面的來源。
這意味著它們只能在設定它們的頂級網站的上下文中讀取。這允許阻止跨網站跟蹤,同時仍然允許第三方 Cookie 的合法使用,例如在域及其子域之間持久儲存嵌入式地圖或聊天小部件的狀態,以及持久儲存子資源 CDN 負載平衡和無頭 CMS 提供商的配置資訊。
CHIPS 如何工作?
要了解 CHIPS 的工作原理,讓我們看一個簡短的示例。從歷史上看,當一個網站透過 <iframe> 嵌入內容時,嵌入的內容能夠響應跨網站請求在使用者裝置上設定 Cookie。如果使用者訪問嵌入相同內容的其他網站,嵌入的內容可以訪問最初由嵌入內容的第一個例項設定的相同 Cookie。這使內容所有者能夠跟蹤使用者在這些網站以及嵌入相同內容的任何其他網站上的活動。
例如
- 使用者訪問
https://site-a.example,該網站嵌入來自https://3rd-party.example的內容。https://3rd-party.example在使用者裝置上設定了一個 Cookie。 - 使用者訪問
https://site-b.example,該網站也嵌入https://3rd-party.example。https://3rd-party.example的這個新例項仍然可以訪問在使用者處於上一個頁面時設定的 Cookie。
這是因為從歷史上看,Cookie 的儲存方式是使用一個鍵,該鍵基於設定它們的網站的宿主或域名,即宿主鍵。在上面的情況下,Cookie 將使用("3rd-party.example")的鍵儲存。
支援 CHIPS 的瀏覽器為 Set-Cookie HTTP 頭部提供了一個新的屬性 - Partitioned - 設定該屬性後,網站所有者可以選擇使用 CHIPS。
Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;
注意: 分割槽 Cookie 必須使用Secure設定。此外,在設定分割槽 Cookie 時,您可以使用__Host字首將它們繫結到當前域或子域,如果不需要在子域之間共享 Cookie,建議這樣做。
設定Partitioned後,第三方 Cookie 使用兩個鍵儲存,一個是宿主鍵,另一個是新的分割槽鍵。分割槽鍵基於瀏覽器在發出請求到設定 Cookie 的 URL 終結點時訪問的頂級 URL 的方案和 eTLD+1。
重新審視我們的例子
- 使用者訪問
https://site-a.example,該網站嵌入來自https://3rd-party.example的內容。https://3rd-party.example使用Partitioned在使用者裝置上設定了一個 Cookie,這意味著網站所有者選擇了 CHIPS。 - Cookie 的儲存鍵現在將是
{("https://site-a.example"), ("3rd-party.example")}。 - 當用戶訪問
https://site-b.example,該網站也嵌入https://3rd-party.example時,這個新的嵌入例項將無法訪問該 Cookie,因為分割槽鍵不匹配。
注意: CHIPS 類似於 Firefox 實現的 狀態分割槽機制。區別在於,狀態分割槽將 Cookie 儲存和檢索分成每個頂級網站的獨立 Cookie 儲存庫,而沒有機制允許在需要時選擇加入第三方 Cookie。隨著瀏覽器開始逐步淘汰第三方 Cookie 的使用,仍然存在有效的、非跟蹤的第三方 Cookie 使用方式,需要在開發人員開始處理這一變化時允許這些方式。
CHIPS 和子域
CHIPS 仍然允許嵌入在網站不同子域中的第三方內容訪問由該內容設定的第三方 Cookie。讓我們看一下使用第三方聊天服務的零售網站示例
- 使用者訪問
https://shoppy.example,該網站嵌入來自https://3rd-party.example/chat的第三方聊天服務,為需要幫助的使用者提供支援。https://3rd-party.example/chat使用Partitioned在使用者裝置上設定了一個 Cookie,以持久儲存聊天在不同網站子域中的狀態。 - Cookie 的儲存鍵將是
{("https://shoppy.example"), ("3rd-party.example/chat")}。 - 使用者訪問了也嵌入
https://3rd-party.example/chat的各種子域,包括https://support.shoppy.example和https://checkout.shoppy.example。新的嵌入例項能夠訪問 Cookie,因為分割槽鍵仍然匹配。
規範
| 規範 |
|---|
| 擁有獨立分割槽狀態的 Cookie 規範 # section-2.1 |
瀏覽器相容性
BCD 表格僅在瀏覽器中載入
另請參閱
- 擁有獨立分割槽狀態的 Cookie (CHIPS) 在 developers.google.com 上
- CHIPS 說明