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