拥有独立分区状态的 Cookie (CHIPS)

实验性: 这是一个 实验性技术
在生产环境中使用之前,请仔细查看 浏览器兼容性表

拥有独立分区状态的 Cookie (CHIPS,也称为分区 Cookie) 允许开发人员将 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.examplehttps://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;

注意: 分区 Cookie 必须使用Secure设置。此外,在设置分区 Cookie 时,您可以使用__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 存储和检索分成每个顶级网站的独立 Cookie 存储库,而没有机制允许在需要时选择加入第三方 Cookie。随着浏览器开始逐步淘汰第三方 Cookie 的使用,仍然存在有效的、非跟踪的第三方 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,因为分区键仍然匹配。

规范

规范
拥有独立分区状态的 Cookie 规范
# section-2.1

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅