Cookie理解

具體屬性資料:https://github.com/mqyqingfeng/Blog/issues/157

起因:HTTP是無狀態(tài)協(xié)議

注意:Cookie的存在是為了解決后端服務(wù)的狀態(tài)問題,而不是通訊協(xié)議的狀態(tài)問題,別搞混了。

優(yōu)點:不需要保持狀態(tài),減少服務(wù)器的CPU及內(nèi)存消耗。也正是因為HTTP協(xié)議本身非常簡單,所以被應(yīng)用于不同場景。

解決方案:Cookie

Cookie

作用:通過在請求和響應(yīng)報文中寫入Cookie信息來控制客戶端的狀態(tài)。

主要流程:Cookie會根據(jù)服務(wù)器端發(fā)送的響應(yīng)報文內(nèi)的Set-Cookie首部字段信息,通知客戶端保存Cookie。當(dāng)下次客戶端再次發(fā)送請求,帶上該Cookie;服務(wù)端根據(jù)客戶端Cookie鑒定客戶端來源,對比服務(wù)器記錄,得到該客戶端之前狀態(tài)信息。


跨域和跨站

首先要理解的一點就是跨站和跨域是不同的。同站(same-site)/跨站(cross-site)」和第一方(first-party)/第三方(third-party)是等價的。但是與瀏覽器同源策略(SOP)中的「同源(same-origin)/跨域(cross-origin)」是完全不同的概念。

同源策略的同源是指兩個 URL 的協(xié)議/主機名/端口一致。例如,https://www.taobao.com/pages/...,它的協(xié)議是?https,主機名是?www.taobao.com,端口是?443。

同源策略作為瀏覽器的安全基石,其「同源」判斷是比較嚴格的,相對而言,Cookie中的「同站」判斷就比較寬松:只要兩個 URL 的 eTLD+1 相同即可,不需要考慮協(xié)議和端口。其中,eTLD 表示有效頂級域名,注冊于 Mozilla 維護的公共后綴列表(Public Suffix List)中,例如,.com、.co.uk、.github.io 等。eTLD+1 則表示,有效頂級域名+二級域名,例如 taobao.com 等。

舉幾個例子,www.taobao.com 和?www.baidu.com?是跨站,www.a.taobao.com 和?www.b.taobao.com?是同站,a.github.io 和 b.github.io 是跨站(注意是跨站)。

主要注意點:SameSite

SameSite 是最近非常值得一提的內(nèi)容,因為 2 月份發(fā)布的 Chrome80 版本中默認屏蔽了第三方的 Cookie,這會導(dǎo)致阿里系的很多應(yīng)用都產(chǎn)生問題,為此還專門成立了問題小組,推動各 BU 進行改造。

屬性值:
1. Strict:
僅允許一方請求攜帶Cookie,即瀏覽器將只發(fā)送相同站點請求的Cookie,即當(dāng)前網(wǎng)頁URL與請求目標URL完全一致。

2. Lax: 允許部分第三方請求攜帶Cookie

3. None: 無論是否跨站都會發(fā)送Cookie


影響:舉個例子,例如阿里巴巴在各大網(wǎng)站比如今日頭條、網(wǎng)易、微博等投放廣告,是用iframe嵌入的,設(shè)置SameSite為Lax就不能發(fā)送Cookie,就不能準確的進行推薦。

解決:設(shè)置SameSite為None

不過也會有兩點要注意的地方:

HTTP 接口不支持 SameSite=none

????如果你想加 SameSite=none 屬性,那么該 Cookie 就必須同時加上 Secure 屬性,表示只有在 HTTPS 協(xié)議下該 Cookie 才會被發(fā)送。

需要 UA 檢測,部分瀏覽器不能加 SameSite=none

????IOS 12 的 Safari 以及老版本的一些 Chrome 會把 SameSite=none 識別成 SameSite=Strict,所以服務(wù)端必須在下發(fā) Set-Cookie 響應(yīng)頭時進行 User-Agent 檢測,對這些瀏覽器不下發(fā) SameSite=none 屬性

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容