跳转到主要内容

category

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

具有独立分区状态的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.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;


注意:分区cookie必须使用Secure设置。此外,建议在设置分区cookie时使用__Host前缀,使其绑定到主机名而不是可注册的域。

使用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仍然允许嵌入网站不同子域的第三方内容访问该内容设置的第三方cookies。让我们看一个使用第三方聊天服务的零售网站示例:

  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.example和https://checkout.shoppy.example.新的嵌入实例能够访问cookie,因为分区键仍然匹配。

规格

规格

Cookies Having Independent Partitioned State specification
# section-2.1

文章链接

标签