誰(shuí)能幫我們順利過(guò)渡到?jīng)]有三方 Cookie 的未來(lái)?
大家好,我是 ConardLi,今天我們繼續(xù)來(lái)聊 Cookie 。還是三方 Cookie 的問(wèn)題,我們先回顧一下:
三方 Cookie
第三方 Cookie 可以讓服務(wù)跟蹤用戶并從許多不相關(guān)的頂級(jí)站點(diǎn)分析他們的信息,我們一般稱之為跨站點(diǎn)跟蹤。
例如,當(dāng)用戶訪問(wèn)站點(diǎn) A 時(shí),來(lái)自站點(diǎn) C 的 iframe 內(nèi)容可以在用戶的瀏覽器上設(shè)置一個(gè) Cookie 來(lái)響應(yīng)跨站點(diǎn)的請(qǐng)求。如果用戶隨后訪問(wèn)也嵌入了 C 的站點(diǎn) B,則站點(diǎn) C 可以訪問(wèn)到先前在用戶訪問(wèn)站點(diǎn) A 時(shí)設(shè)置的相同 Cookie。
為了保護(hù)用戶的隱私,瀏覽器供應(yīng)商正在對(duì)這種行為進(jìn)行限制,并逐步停止對(duì)第三方 Cookie 的支持。目前 Safari 已經(jīng)完全禁止了三方 Cookie,Chrome 也宣布將會(huì)在未來(lái)的兩年內(nèi)棄用。
目前業(yè)界仍然沒(méi)有比較成熟的方案來(lái)應(yīng)對(duì)三方 Cookie 被禁用后的各種影響。
去年 Cookie 新增的 SameParty 屬性可以在一定場(chǎng)景下替代三方 Cookie,它可以讓在同一個(gè)運(yùn)營(yíng)主體下不同域名的 Cookie 也能共享。
但是應(yīng)對(duì)場(chǎng)景還是有些局限,另外配置也比較復(fù)雜,所以目前還沒(méi)得到大規(guī)模使用。
一個(gè)常見(jiàn)的業(yè)務(wù)場(chǎng)景
假如我們現(xiàn)在有一個(gè)通用的聊天服務(wù),由第三方服務(wù) support.chat.example 提供支持,我們的網(wǎng)站 retail.example 希望用 iframe 的方式嵌入這個(gè)聊天框。這個(gè)嵌入式的聊天服務(wù)可能會(huì)依賴 Cookie 來(lái)保存用戶的交互歷史記錄。
假如沒(méi)有了設(shè)置跨站點(diǎn)三方 Cookie 的能力,則 support.chat.example 可能需要更改為依賴 retail.example 傳遞給他們的第一方會(huì)話的一些標(biāo)識(shí)符。在這種情況下,每個(gè)嵌入 support.chat.example 聊天服務(wù)的網(wǎng)站都需要額外的設(shè)置來(lái)傳遞狀態(tài),這大大增加了開(kāi)發(fā)成本。
或者,我們也可以允許 support.chat.example 請(qǐng)求 retail.example 頁(yè)面上的 JavaScript。這引入了非常大的安全風(fēng)險(xiǎn),也不是個(gè)靠譜的方法。
CHIPS
為了應(yīng)對(duì)這種問(wèn)題,Chrome 提出了具有獨(dú)立分區(qū)狀態(tài)的 Cookie (CHIPS) ,它允許開(kāi)發(fā)者將 Cookie 選擇到“分區(qū)”存儲(chǔ)中,每個(gè)頂級(jí)站點(diǎn)都有單獨(dú)的 Cookie jar。
Chrome 官方是這樣描述它的:CHIPS 是幫助服務(wù)順利過(guò)渡到?jīng)]有第三方 Cookie 的未來(lái)的重要一步。
CHIPS 引入了一個(gè)新的 Cookie 屬性:Partitioned ,它可以讓頂級(jí)上下文分決定哪些 Cookie 進(jìn)行分區(qū)。
還是上面的例子,我們?cè)谡军c(diǎn) A 中通過(guò) iframe 嵌入了一個(gè)站點(diǎn) C,正常情況下如果三方 Cookie 被禁用后,C 是無(wú)法在 A 站點(diǎn)訪問(wèn)到它的 Cookie 的。
如果 C 在它的 Cookie 上指定了 Partitioned 屬性,這個(gè) Cookie 將保存在一個(gè)特殊的分區(qū) jar 中。它只會(huì)在站點(diǎn) A 中通過(guò) iframe 嵌入站點(diǎn) C 時(shí)才會(huì)生效,瀏覽器會(huì)判定只會(huì)在頂級(jí)站點(diǎn)為 A 時(shí)才發(fā)送該 Cookie。
當(dāng)用戶訪問(wèn)一個(gè)新站點(diǎn)時(shí),例如站點(diǎn) B,如果也它通過(guò) iframe 嵌入了站點(diǎn) C,這時(shí)在站點(diǎn) B 下的站點(diǎn) C 是無(wú)法訪問(wèn)到之前在 A 下面設(shè)置的那個(gè) Cookie 的。
如果用戶直接訪問(wèn)站點(diǎn) C ,一樣也是訪問(wèn)不到這個(gè) Cookie 的。
這就在保護(hù)了用戶隱私的情況下完美的解決了 iframe 頁(yè)面三方 Cookie 的問(wèn)題,完美 ~
下面是啟用了 CHIPS 后 Cookie 的分區(qū)鍵的變化:
試用
CHIPS 將在 Chrome 100 到 103 版本啟動(dòng)試用版本!
如果想在本地試用,可以在 Chrome Canary 中打開(kāi) chrome://flags/#partitioned-cookies 標(biāo)志:
和 SameParty 一樣,CHIPS 也是其實(shí)也是解決三方 Cookie 問(wèn)題眾多提案中的一個(gè),因?yàn)?Cookie 的改動(dòng)影響太大,誰(shuí)能最終脫穎而出成為各大瀏覽器的通用方案還不好說(shuō),我們后續(xù)拭目以待吧!