Cookies Having Independent Partitioned State (CHIPS)

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

Cookies Having Independent Partitioned State (CHIPS,也稱為 Partitioned cookies) 允許開發者選擇將 cookie 放入獨立分割槽儲存,每個頂級站點擁有獨立的 cookie 罐。

在沒有 cookie 分割槽的情況下,第三方 cookie 可以讓服務跟蹤使用者,並將他們的資訊關聯到不相關的頂級站點。標記為 Partitioned 的 cookie 是雙重鍵控的:由設定它們的源以及頂級頁面的源共同決定。

這意味著它們只能在設定它們的頂級站點的上下文中讀取。這可以阻止跨站點跟蹤,同時仍允許第三方 cookie 的合法用途,例如在域名及其子域之間保持嵌入式地圖或聊天小部件的狀態,以及為子資源 CDN 負載均衡和無頭 CMS 提供商保持配置資訊。

CHIPS 是如何工作的?

為了理解 CHIPS 的工作原理,讓我們看一個簡短的例子。歷史上,當一個站點透過 <iframe> 嵌入內容時,嵌入的內容能夠響應跨站點請求,在使用者的裝置上設定 cookie。如果使用者訪問了嵌入相同內容的其他站點,嵌入的內容就可以訪問最初由嵌入內容第一個例項設定的同一個 cookie。這使得內容所有者能夠跨這些站點以及嵌入相同內容的任何其他站點跟蹤使用者活動。

例如

  1. 使用者訪問 https://site-a.example,它嵌入了來自 https://3rd-party.example 的內容。https://3rd-party.example 在使用者的裝置上設定了一個 cookie。
  2. 使用者訪問 https://site-b.example,它也嵌入了 https://3rd-party.example。這個新的 https://3rd-party.example 例項仍然可以訪問使用者在上一個頁面時設定的 cookie。

這是因為歷史上 cookie 是根據設定它們的站點的主機或域名(也稱為主機鍵)來儲存的。在上面的例子中,cookie 將以 ("3rd-party.example") 的鍵儲存。

支援 CHIPS 的瀏覽器為 Set-Cookie HTTP 標頭提供了一個新屬性 — Partitioned — 當設定此屬性時,站點所有者可以選擇使用 CHIPS。

http
Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;

注意: Partitioned cookies 必須使用 Secure 進行設定。此外,您可以在設定 partitioned cookies 時使用 __Host 字首,將其僅繫結到當前域或子域,如果您不需要在子域之間共享 cookie,建議這樣做。

設定了 Partitioned 後,第三方 cookie 將使用兩個鍵進行儲存:主機鍵和一個新的分割槽鍵。分割槽鍵基於瀏覽器在請求設定 cookie 的 URL 端點時正在訪問的頂級 URL 的方案和 eTLD+1

重新審視我們的例子

  1. 使用者訪問 https://site-a.example,它嵌入了來自 https://3rd-party.example 的內容。https://3rd-party.example 在使用者的裝置上使用 Partitioned 設定了一個 cookie,這意味著站點所有者選擇了 CHIPS。
  2. 該 cookie 的儲存鍵現在將是 {("https://site-a.example"), ("3rd-party.example")}
  3. 當用戶訪問 https://site-b.example(也嵌入 https://3rd-party.example)時,這個新的嵌入例項將無法訪問該 cookie,因為分割槽鍵不匹配。

注意: CHIPS 類似於 Firefox 實現的 狀態分割槽機制。然而,狀態分割槽預設會為第三方上下文劃分 cookie 儲存,而 CHIPS 允許為第一方和第三方上下文選擇加入分割槽 cookie。建議使用 CHIPS 的選擇加入機制而不是狀態分割槽,以提供最相容的分割槽 cookie。

CHIPS 和子域

CHIPS 仍然允許跨不同站點子域嵌入的第三方內容訪問該內容設定的第三方 cookie。讓我們看一個使用第三方聊天服務的零售網站示例。

  1. 使用者訪問 https://shoppy.example,它嵌入了來自 https://3rd-party.example/chat 的第三方聊天服務,為需要幫助的使用者提供支援。https://3rd-party.example/chat 在使用者的裝置上使用 Partitioned 設定了一個 cookie,以便在不同站點子域之間持久化聊天狀態。
  2. 該 cookie 的儲存鍵將是 {("https://shoppy.example"), ("3rd-party.example/chat")}
  3. 使用者訪問各種也嵌入 https://3rd-party.example/chat 的子域,包括 https://support.shoppy.examplehttps://checkout.shoppy.example。新的嵌入例項能夠訪問該 cookie,因為分割槽鍵仍然匹配。

規範

規範
Cookies Having Independent Partitioned State 規範
# section-2.1

瀏覽器相容性

另見