cookie是瀏覽器的一種本地存儲方式秦躯,一般用來幫助客戶端和服務(wù)端通信的裆装,常用來進(jìn)行身體校驗(yàn)踱承,結(jié)合服務(wù)端的session使用。
場景簡述如下:
在登錄頁面哨免,用戶登錄了茎活,
此時(shí)服務(wù)端會生成一個(gè)session,session中有對于用戶的信息(如用戶名琢唾、密碼等)
然后會有一個(gè)sessionid(相當(dāng)于服務(wù)端的session對應(yīng)的key)
然后服務(wù)端在登錄頁面中寫入cookie载荔,值就是jsessionid=xxx
然后瀏覽器本地就有這個(gè)cookie了,以后訪問同域名下的頁面時(shí)采桃,自動帶上cookie懒熙,自動校驗(yàn),在有效時(shí)間內(nèi)無需二次登錄普办。
上述就是cookie的常用場景簡述工扎。
一般來說,cookie是不允許存放敏感信息的衔蹲,因?yàn)榉浅2话踩铮绻欢ㄒ獜?qiáng)行存儲,首先畴博,一定要在cookie中設(shè)置httponly(這樣就無法通過js操作了)袱结,另外可以考慮rsa等非對稱加密溢吻。
由于在同域名的資源請求時(shí)而晒,瀏覽器會默認(rèn)帶上本地的cookie迅耘,針對這種情況,在某些場景下是需要優(yōu)化的。
譬如以下場景:
客戶端在域名A下有cookie(這個(gè)可以是登陸時(shí)由服務(wù)端寫入的)
然后在域名A下有一個(gè)頁面,頁面中有很多依賴的靜態(tài)資源(都是域名A的垦写,譬如有20個(gè)靜態(tài)資源)
此時(shí)就有一個(gè)問題况毅,頁面加載,請求這些靜態(tài)資源時(shí)蒸甜,瀏覽器會默認(rèn)帶上cookie
也就是說窍荧,這20個(gè)靜態(tài)資源的http請求憔恳,每一個(gè)都得帶上cookie,而實(shí)際上靜態(tài)資源并不需要cookie驗(yàn)證
此時(shí)就造成了較為嚴(yán)重的浪費(fèi)腔丧,而且也降低了訪問速度(因?yàn)閮?nèi)容更多了)
當(dāng)然了,針對這種場景,是有優(yōu)化方案的(多域名拆分)。具體做法就是:
將靜態(tài)資源分組型宙,分別放到不同的域名下(如static.base.com)
而page.base.com(頁面所在域名)下請求時(shí)搁嗓,是不會帶上static.base.com域名的cookie的衡怀,所以就避免了浪費(fèi)茂契。
說到了多域名拆分脐雪,這里再提一個(gè)問題,那就是:
在移動端透硝,如果請求的域名數(shù)過多,會降低請求速度(因?yàn)橛蛎捉馕隽鞒淌呛芎馁M(fèi)時(shí)間的丽声,而且移動端一般帶寬都比不上pc)
此時(shí)就需要用到一種優(yōu)化方案:dns-prefetch(讓瀏覽器空閑時(shí)提前解析dns域名,不過也請合理使用,勿濫用)
關(guān)于cookie的交互箍鼓,可以看下圖總結(jié)