Cookie是什么
“cookie是為了辨別用戶身份而儲(chǔ)存在用戶本地終端(Client Side)上的數(shù)據(jù)”——wiki
通俗的理解cookie是一張長期門票止喷,用戶持有該門票進(jìn)入網(wǎng)站便可不必重復(fù)驗(yàn)證用戶信息
Cookie有哪些特點(diǎn)
- 初次登陸時(shí),服務(wù)器通過
response.setHeader('set-Cookie',`email=${email}`)
設(shè)置cookie - 瀏覽器得到cookie后,每次請(qǐng)求都會(huì)帶上cookie
- 服務(wù)器讀取cookie以得到用戶的信息
- cookie存在本地文件中
- cookie可以被用戶手動(dòng)更改飒赃,所以并不安全
- cookie有效期可以被后端強(qiáng)制設(shè)置
- 后端如何讀取cookie:
request.headers.cookie
set-Cookie有哪些值
-
非完整正規(guī)流程展示
742759705.jpg
session
session是基于cookie實(shí)現(xiàn)的甲葬。在服務(wù)器有一塊內(nèi)存中存有sessionId和相應(yīng)的用戶信息撇寞。服務(wù)器通過set-Cookie不直接將用戶信息發(fā)送瀏覽器而將sessionid發(fā)給瀏覽器绍撞。當(dāng)瀏覽器再次訪問服務(wù)器時(shí),服務(wù)器通過sessionid來找到相應(yīng)用戶信息蜻韭。
localStorage
localStorage是新出的一個(gè)API
它存儲(chǔ)相應(yīng)的信息悼尾,作持久化存儲(chǔ),有什么用肖方?
我希望某些東西在頁面中只出現(xiàn)一次闺魏,比如一些彈窗,怎么記錄這個(gè)彈窗已經(jīng)彈出過俯画?就用localStorage
怎么用析桥?
localStorage.setItem('cat','yyh')
localStorage.getItem('cat')//yyh
localStorage.removeItem('cat')
localStorage.clear()
其特點(diǎn)是:
- 它與HTTP沒有任何關(guān)系,HTTP不會(huì)帶上localStorage的值活翩,一般只由前端控制
- 僅有相同域名的頁面才能相互讀取localStorage的值(沒有同源策略那么嚴(yán)格)
3.每個(gè)域名最大存儲(chǔ) 5MB左右 - 理論上長期有效烹骨,除非用戶清楚緩存
cache-control
cache-control是一個(gè)響應(yīng)頭
怎么設(shè)置:response.setHeader('cache-control','max-age=1000000')
以秒為單位
在設(shè)置了這個(gè)響應(yīng)頭后翻伺,瀏覽器訪問同一個(gè)url材泄,就不會(huì)在發(fā)起請(qǐng)求,轉(zhuǎn)而讀取本地緩存吨岭。
因而只要改變url就不會(huì)使用緩存拉宗,例如給url加一些參數(shù),當(dāng)版本升級(jí)時(shí)就可以做到不讀取緩存
expires
expires也是一個(gè)響應(yīng)頭辣辫,與cache-control作用一致
區(qū)別是旦事,expires的過期時(shí)間是確定的某個(gè)時(shí)間而不是一段時(shí)間
response.setHeader('expires','Wed, 21 Oct 2015 07:28:00 GMT')
ETag
ETag是一個(gè)響應(yīng)頭
當(dāng)瀏覽器向服務(wù)器請(qǐng)求某個(gè)資源時(shí),服務(wù)器通過MD5算法急灭,計(jì)算一個(gè)值姐浮,并將該值通過ETag返回給瀏覽器,當(dāng)瀏覽器再次請(qǐng)求這個(gè)資源葬馋,通過請(qǐng)求頭(if-none-match
)帶上這個(gè)值卖鲤,服務(wù)器會(huì)將這個(gè)值與本地的值對(duì)比,如果一樣畴嘶,返回狀態(tài)碼304
304
:not modified 響應(yīng)沒有響應(yīng)體只有響應(yīng)頭蛋逾,服務(wù)器沒法下載響應(yīng)體只能從本地緩存中讀取這個(gè)資源
對(duì)比cache-control,依舊是cache-control更好窗悯,因?yàn)閑tag會(huì)發(fā)請(qǐng)求区匣,cache-control連請(qǐng)求都不發(fā),速度更快