摘要:理解進公園背景這個公園有一個總公園總公園里有許多小公園總公園是登錄頁面小公園是域名相同的頁面第一次進總公園第一次請求某個服務(wù)器工作人員檢查你的入園是否符合條件后端查看是否是注冊以后的用戶通過條件的話工作人員會給你一張票后端會給你一個響應(yīng)頭這
Cookie, Session, LocalStorage, SessionStorage Cookie 理解
進公園
背景: 這個公園有一個總公園, 總公園里有許多小公園(總公園是登錄頁面, 小公園是域名相同的頁面)
第一次進總公園, (第一次請求某個服務(wù)器)
工作人員檢查你的入園是否符合條件(后端查看是否是注冊以后的用戶)
通過條件的話工作人員會給你一張票(后端會給你一個響應(yīng)頭, 這個響應(yīng)頭的作用是設(shè)置一個 cookie )
票的內(nèi)容是只有工作人員才知道是否可以入園的字符串
第二次進總公園(第二次請求相同的域名)
你要帶上這個票進公園(瀏覽器會在請求頭帶上cookie)
工作人員看到這個票, 確認里面的內(nèi)容正確就給你進去(后端看到這個cookie就會讓你直接進入登錄后的頁面)
Cookie 的實現(xiàn)服務(wù)器通過 Set-Cookie 頭給客戶端一串字符串(背)
客戶端每次訪問相同域名的網(wǎng)頁時,必須帶上這段字符串(背)
客戶端要在一段時間內(nèi)保存這個Cookie(背)
Cookie 默認在用戶關(guān)閉頁面后就失效,后臺代碼可以任意設(shè)置 Cookie 的過期時間
大小大概在 4kb 以內(nèi)
Session的理解進公園
? 背景: 我是一個壞游客, 我知道什么樣的字符串就可以進入公園, 于是我可以偽造假的門票, 工作人員發(fā)現(xiàn)了這個問題, 所以工作人員采用更安全的方法來審查門票
第一次進總公園, (第一次請求某個服務(wù)器)
工作人員檢查你的入園是否符合條件(后端查看是否是注冊以后的用戶)
通過條件的話工作人員會給你一張票(后端會給你一個響應(yīng)頭, 這個響應(yīng)頭的作用是設(shè)置一個 cookie , cookie 的值是一個隨機數(shù))
并且工作人員把票的字符串和你的名字寫到一張表里(后端設(shè)置一個session, 保存在服務(wù)器內(nèi)存中, session的內(nèi)容是之前的隨機數(shù)對應(yīng)你的用戶信息)
票的內(nèi)容是只有工作人員才知道是否可以入園的字符串
第二次進總公園(第二次請求相同的域名)
你要帶上這個票進公園(瀏覽器會在請求頭帶上cookie)
工作人員看到這個票, 通過判斷票的字符串是否和表的字符串匹配, 如果匹配,那么說明可以進入(后端拿到請求內(nèi)容的cookie的隨機數(shù), 會和sessions的內(nèi)容進行比對, 看請求的cookie的隨機數(shù)有沒有在sessions上出現(xiàn),如果出現(xiàn)了, 就會讓你進入登錄后的頁面)
比cookie多做兩件事情(標(biāo)了粗體)
sessions其實就是服務(wù)器的一塊內(nèi)存, key:value, 分別是隨機數(shù)和用戶的信息
Session的實現(xiàn)將 SessionID(隨機數(shù))通過 Cookie 發(fā)給客戶端
客戶端訪問服務(wù)器時,服務(wù)器讀取 SessionID
服務(wù)器有一塊內(nèi)存(哈希表)保存了所有 session
通過 SessionID 我們可以得到對應(yīng)用戶的隱私信息,如 id、email
這塊內(nèi)存(哈希表)就是服務(wù)器上的所有 session
?
localStorage掛在window的一個對象, 是瀏覽器的hash
掌握localStorage的三個 api
localStorage.setItem("xxx", "yyy") 如果 yyy 是對象, 那么要用 JSON 轉(zhuǎn)一下再存儲
localStorage.getItem("xxx")
localStorage.clear()
localStorage存在c盤文件
LocalStorage 跟 HTTP 無關(guān)
HTTP 不會帶上 LocalStorage 的值
只有相同域名的頁面才能互相讀取 LocalStorage(沒有同源那么嚴格)
每個域名 localStorage 最大存儲量為 5Mb 左右(每個瀏覽器不一樣)
常用場景:記錄有沒有提示過用戶(沒有用的信息,不能記錄密碼)demo
LocalStorage 永久有效,除非用戶清理緩存
SessionStorage(會話存儲)4,5,6,7同上
9不同: 在用戶關(guān)閉頁面(會話結(jié)束)后就失效 === 關(guān)閉頁面
Session 通過 LocalStorage + 查詢參數(shù)實現(xiàn)未完成
Cache-Control寫在后端的相應(yīng)大文件AA的路由中, 給響應(yīng)內(nèi)容的第二部分加上這里的某些語法
那么在第二次瀏覽器想請求同樣的大文件AA時, 服務(wù)器發(fā)現(xiàn)了, 直接不產(chǎn)生 HTTP 請求,
瀏覽器直接在本地內(nèi)存拿到大文件AA
在實際工作中, 入口文件(一般是index)不設(shè)置Cache-Control, 其他的文件都設(shè)置Cache-Control, 時間越長越好
首頁不能設(shè)置Cache-Control的原因
假設(shè)設(shè)置了百度首頁的Cache-Control為一天
用戶一般進入百度首頁只能是在 URL 中輸入www.baidu.com, 那么首頁在一天的時間內(nèi)都不能獲得最新的版本, 也可以理解為沒有接口去更新頁面了, 因為所有的路口都封鎖了
但是為什么js文件, css文件又可以設(shè)置Cache-Control呢?
因為用戶一般不會自己去請求js文件, css文件
如果遇到j(luò)s文件更新版本, 那么怎么辦?
在前端請求js文件中, 給路徑加個查詢參數(shù)即可
這是原來的:
這是現(xiàn)在的:
Expire和Cache-Control寫的位置一樣, 語法,不同的是控制緩存的時間要寫成什么時候過期的時間, 如Wed, 21 Oct 2015 07:28:00 GMT, 而用戶有可能把本地的時間弄錯, 所以現(xiàn)在都使用 Cache-Control
Etag與 MD5 有關(guān)系
MD5是一種摘要算法, 用于確認信息傳輸是否一致
如你下載一部電影, 網(wǎng)上的電影的文件對應(yīng)一個MD5值,
你下載電影后, 本地的電影也對應(yīng)一個MD5值
兩個MD5值如果完全相同,就說明確實是一個文件了
特點: 如果兩個文件內(nèi)容越相似, 那么兩個MD5的值差異越大
在后端中, 將相應(yīng)的文件內(nèi)容給一個 MD5的值, 并且把這個MD5的值設(shè)置為響應(yīng)內(nèi)容的第二部分中Etag(key)的value
那么前端在重新請求這個文件的時候,請求內(nèi)容就會帶上if-None-Match: MDXXXXXXX這個請求頭
后端發(fā)現(xiàn)請求內(nèi)容的if-None-Match: MDXXXXXXX和服務(wù)器中相應(yīng)文件的MD5相同, 那么后端知道這個文件不需要下載
給前端的響應(yīng)內(nèi)容沒有第四部分,只有第一和第二部分, 并且返回的狀態(tài)碼是304
Cache-Control直接不請求, Etag直接不下載(要請求)
一些區(qū)別更多文章在我的github上
https://github.com/wojiaofeng...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107302.html
摘要:保持狀態(tài)保存在瀏覽器端,保存在服務(wù)器端存儲的大小單個保存的數(shù)據(jù)不能超過大小沒有限制。的目的是克服由所帶來的一些限制,當(dāng)數(shù)據(jù)需要被嚴格控制在客戶端時,不需要持續(xù)的將數(shù)據(jù)發(fā)回服務(wù)器。的生命周期是僅在當(dāng)前會話下有效。 寫在前面 既然是淺談,就不會詳細從底層原理解釋這幾個的區(qū)別,就簡單地聊一下,這幾個的區(qū)別,優(yōu)缺點,應(yīng)用場景 cookie和session 瀏覽器的緩存機制提供了可以將用戶數(shù)據(jù)存...
摘要:不是很安全,別人可以分析存放在本地的并進行欺騙,考慮到安全應(yīng)當(dāng)使用。因此不是一種持久化的本地存儲,僅僅是會話級別的存儲。用于持久化的本地存儲,除非主動刪除數(shù)據(jù),否則數(shù)據(jù)是永遠不會過期的。 前言 總括:詳細講述Cookie,LocalStorge,SesstionStorge的區(qū)別和用法。 人生如畫,歲月如歌。 原文博客地址:Javascript本地存儲小結(jié) 知乎專欄&&簡書專題:前端...
摘要:使用方法與相同存儲讀取刪除刪除所有刪除某個兼容性與都支持,大部分瀏覽器都支持六是在瀏覽器保存結(jié)構(gòu)化數(shù)據(jù)中的一種數(shù)據(jù)庫。所以是為了可以在客戶端存儲大量的結(jié)構(gòu)化數(shù)據(jù)而存在的,并且使用索引高效檢索的。 前言 瀏覽器緩存就是把一個請求過的web資源,存儲在瀏覽器中。等下次在訪問相同的請求時,緩存會根據(jù)緩存機制去決定要不要向服務(wù)器發(fā)送請求,或者直接用緩存的資源響應(yīng)訪問。 瀏覽器緩存一般包含有 1...
摘要:如圖圖顧名思義,,是級別的存儲。如筆者寫的一篇淺析文章聊一聊百度移動端首頁前端速度那些事兒讀者們可以嘗試使用。 歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面(不僅僅是代碼):https://segmentfault.com/blog/frontenddriver 在web開發(fā)越來越復(fù)雜的今天,前端擁有的能力也越來越多。其中最重要的一項莫過于web存儲。...
閱讀 743·2021-11-17 09:33
閱讀 3778·2021-09-01 10:46
閱讀 1763·2019-08-30 11:02
閱讀 3293·2019-08-29 15:05
閱讀 1409·2019-08-26 11:39
閱讀 2284·2019-08-23 17:04
閱讀 1984·2019-08-23 15:43
閱讀 1381·2019-08-23 14:12