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