簡述瀏覽器緩存控制

瀏覽器緩存控制
瀏覽器緩存控制

如果讓我們?nèi)崿F(xiàn)一個HTTP緩存機制麦轰,我們應(yīng)該怎么去實現(xiàn)呢怜庸,接下來我們將帶著這個去閱讀這篇文章!

思路1,無緩存

假設(shè)瀏覽器向服務(wù)器請求資源a.html時,服務(wù)器找到對應(yīng)的資源a.html,然后將資源返回給瀏覽器。當(dāng)瀏覽器再次向服務(wù)器請求該資源時米绕,服務(wù)器將再次將該資源返回給瀏覽器瑟捣。
優(yōu)點:簡單。栅干。
缺點:每次請求資源都需要服務(wù)器查找迈套,然后再返回資源,導(dǎo)致服務(wù)器相應(yīng)慢碱鳞,浪費帶寬桑李。

思路2贵白,有緩存無更新

我們通過思路1的思考禁荒,忽然大悟呛伴!哦热康,原來每次請求資源會導(dǎo)致這樣的問題啊姐军,那么我們加個緩存不就好了嗎庶弃?哈哈歇攻,我真是太天才了缴守。因此接下來屡穗,瀏覽器第一次請求資源a.html時,服務(wù)器會響應(yīng)并發(fā)送完整文件烂斋,然后瀏覽器可以把這個文件存到本地(緩存)础废,下次瀏覽器再次請求該資源時,就直接讀取本地緩存就可以帘瞭,這應(yīng)就能提高網(wǎng)頁響應(yīng)速度和省下帶寬了蝶念。
優(yōu)點:省帶寬媒殉,提高頁面響應(yīng)速度适袜。
缺點:果服務(wù)器上a.html的文件內(nèi)容變了,瀏覽器每次都從緩存讀取無法獲取最新文件

思路3给猾,緩存+更新機制

我們接下來思考敢伸!唔池颈,思路二還是存在重大缺點钓丰,得去改進它携丁。接下瀏覽器在請求a.html時服務(wù)器會發(fā)送完整的文件,并且服務(wù)器發(fā)送的文件還附帶額外的信息——過期時間揭保,如** Expires: Mon,10 Dec 1990 02:25:22GMT**,瀏覽器可以把這個文件和額外信息存到本地宠互。當(dāng)瀏覽器再次想服務(wù)器請求a.html時,瀏覽器就會用當(dāng)前的時間和Expires的時間作比較励负,如果還在Expires規(guī)定的時間內(nèi)继榆,則會使用本地緩存的a.html(200, from xx cache)略吨;否則再次向服務(wù)器再次請求a.html(200)。 服務(wù)器在每次給資源的時候都會發(fā)送新的過期時間乞榨。
優(yōu)點:緩存可控制
缺點:控制的功能太單一吃既,很有可能服務(wù)器a.htm更新了河质,客戶端還在用舊的資源掀鹅。

思路4乐尊,緩存+更新機制升級版

上面我們已經(jīng)實現(xiàn)了簡單的緩存的更新機制科吭。但是還是覺得不太智能对人,功能太單一姻几,我們思考一下蛇捌,看一下應(yīng)該如何完善络拌。HTTP1.1版本提供了Cache-Control讓我們更好地去控制緩存春贸。
比如:瀏覽器第一次請求a.html 時萍恕,服務(wù)器會發(fā)送完整的文件并附帶額外信息。

Cache-Control: max-age=300类垫;

瀏覽器把文件和附帶信息保存起來悉患。當(dāng)再次需要a.html 時,如果是在300秒以內(nèi)發(fā)起的請求則直接使用緩存(200, from xx cache)谴仙,否則重新發(fā)起網(wǎng)絡(luò)請求(200)晃跺。(和Expires有點類似)掀虎,下面是Cache-Control常見的幾個值:
<li>Public表示相應(yīng)可以被任何中間節(jié)點緩存,如 Browser <-- proxy1 <-- proxy2 <-- Server驰怎,中間的代理可以緩存資源县忌,比如下次再請求同一資源proxy1直接把自己緩存的東西給 Browser 而不再向proxy2要。</li>
<li>Private表示中間節(jié)點不能緩存厉颤,對于Browser <-- proxy1 <-- proxy2 <-- Server逼友,proxy2 會老老實實把Server 返回的數(shù)據(jù)發(fā)送給proxy1翁逞,proxy1 會老老實實把Server 返回的數(shù)據(jù)發(fā)送給Browser ,自己不緩存任何數(shù)據(jù)怨喘。當(dāng)下次Browser再次請求時proxy會做好請求轉(zhuǎn)發(fā)而不是自作主張給自己緩存的數(shù)據(jù)必怜。</li>
<li>no-catch表示不使用 Cache-Control的緩存控制方式做前置驗證,而是使用 Etag 或者Last-Modified字段來控制緩存 </li>
<li>no-store 膏执,真正的不緩存任何東西更米。瀏覽器會直接向服務(wù)器請求原始文件征峦,并且請求中不附帶 Etag 參數(shù)(服務(wù)器認為是新請求)类腮。</li>
<li>max-age存哲,表示當(dāng)前資源的有效時間祟偷,單位為秒修肠。</li>
優(yōu)點:緩存功能更為強大。
缺點:加入瀏覽器再次請求a.html莽鸭,而緩存存在的時間間隔超過max-age設(shè)置的足淆,這時候向服務(wù)器發(fā)送請求服務(wù)器應(yīng)該會重新返回a.html的完整文件巧号。假如姥闭,請求的a.html和原來的a.html一樣丹鸿,沒有任何改變,則這就浪費了帶寬了棚品。

思路5靠欢,緩存+更新機制終極版

鑒于思路4的實現(xiàn)方式還是有瑕疵,因此我們在思考一下铜跑。
比如:瀏覽器第一次請求a.html的時候门怪,服務(wù)器響應(yīng)發(fā)送完整的文件并附帶額外信息秧廉,其中Etag 是 對a.html文件的編碼减拭,如果服務(wù)端的a.html沒有修改可霎,則這個值就不會變旺罢。

Cache-Control: max-age=300跪解;
ETag:W/"e-cbxLFQW5zapn79tQwb/g6Q"

瀏覽器把a.html和額外信息存放在本地节吮,當(dāng)緩存在max-age設(shè)置的時間間隔內(nèi)帚豪,則直接讀取緩存a.html(200, from xx cache),假如瀏覽器在300秒之后再次需要獲取a.html時,瀏覽器發(fā)現(xiàn)該緩存的文件已經(jīng)不新鮮了于是就向服務(wù)器發(fā)送請求 重新獲取a.html,在發(fā)送請求的時候附帶剛剛保存的a.html的ETag ( If-None-Match:W/"e-cbxLFQW5zapn79tQwb/g6Q"),服務(wù)器在接收到請求后拿瀏覽器請求的 Etag 和當(dāng)前文件重新計算后端 Etag 做個比較,如果二者相等表示文件未修改則發(fā)送這個短消息(響應(yīng)頭,不包含圖片內(nèi)容, 304),如果二者不等則發(fā)送新文件和新的 ETag,瀏覽器獲取新文件并更新該文件的 Etag。

另外與Etag相似的是Last-Modified/If-Modified-Since。當(dāng)資源過期時(max-age超時),發(fā)現(xiàn)資源具有Last-Modified聲明,則再次向web服務(wù)器請求時帶上頭 If-Modified-Since笋籽,表示請求時間。web服務(wù)器收到請求后發(fā)現(xiàn)有頭If-Modified-Since 則與被請求資源的最后修改時間進行比對。若最后修改時間較新,說明資源又被改動過,則響應(yīng)整片資源內(nèi)容(200)稚茅,若最后修改時間較舊,說明資源無新修改,則響應(yīng)HTTP 304 ,告知瀏覽器繼續(xù)使用所保存的cache呻惕。

總結(jié)

經(jīng)過帶著問題键耕,不斷提出新的思路,我們最終實現(xiàn)控制緩存的比較好的方式。其實HTTP對于前端是非常重要温艇,尤其當(dāng)我們學(xué)習(xí)了Node.js或者其他后端語言去寫web服務(wù)端的時候邻寿,我們發(fā)現(xiàn)離不開HTTP蒜撮,因此我們應(yīng)該要注重HTTP的知識,而不只是比較這個框架好债蜜,還是那個框架牛向胡。況且框架的使用視業(yè)務(wù)場景而定淮捆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市险污,隨后出現(xiàn)的幾起案子萝喘,更是在濱河造成了極大的恐慌削祈,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡绍哎,警方通過查閱死者的電腦和手機崇堰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門海诲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來特幔,“玉大人蚯斯,你說我怎么就攤上這事〈迮伲” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長募疮。 經(jīng)常有香客問我阿浓,道長芭毙,這世上最難降的妖魔是什么退敦? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任侈百,我火速辦了婚禮,結(jié)果婚禮上锭魔,老公的妹妹穿的比我還像新娘震缭。我一直安慰自己拣宰,他們只是感情好巡社,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布晌该。 她就那樣靜靜地躺著朝群,像睡著了一般姜胖。 火紅的嫁衣襯著肌膚如雪右莱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天瓜挽,我揣著相機與錄音购笆,去河邊找鬼如捅。 笑死帆谍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汛蝙。 我是一名探鬼主播朴肺,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼戈稿,長吁一口氣:“原來是場噩夢啊……” “哼讶舰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起跳昼,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鹅颊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后堪伍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡涮俄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年彻亲,在試婚紗的時候發(fā)現(xiàn)自己被綠了室叉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硫惕。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡踪旷,死狀恐怖豁辉,靈堂內(nèi)的尸體忽然破棺而出徽级,到底是詐尸還是另有隱情餐抢,我是刑警寧澤低匙,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站强重,受9級特大地震影響贸人,放射性物質(zhì)發(fā)生泄漏艺智。R本人自食惡果不足惜力惯,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一父晶、第九天 我趴在偏房一處隱蔽的房頂上張望甲喝。 院中可真熱鬧埠胖,春花似錦、人聲如沸非竿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽零聚。三九已至隶症,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間览徒,已是汗流浹背习蓬。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留枫慷,地道東北人浪规。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓誉裆,卻偏偏與公主長得像缸濒,于是被迫代替她去往敵國和親庇配。 傳聞我的和親對象是個殘疾皇子捞慌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 淺談瀏覽器Http的緩存機制 ? ? ? ? ? ? ? ? 針對瀏覽器的http緩存的分析也算是老生常談了揭糕,每隔...
    meng_philip123閱讀 1,008評論 0 10
  • 針對瀏覽器的http緩存的分析也算是老生常談了揪漩,每隔一段時間就會冒出一篇不錯的文章,其原理也是各大公司面試時幾乎必...
    全端玩法閱讀 879評論 0 9
  • 針對瀏覽器的http緩存的分析也算是老生常談了产徊,每隔一段時間就會冒出一篇不錯的文章蜀细,其原理也是各大公司面試時幾乎必...
    單純的土豆閱讀 390評論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理谆刨,服務(wù)發(fā)現(xiàn)痊夭,斷路器脏里,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 轉(zhuǎn)載:瀏覽器緩存知識小結(jié)及應(yīng)用 閱讀目錄 1. 瀏覽器緩存基本認識 2. 強緩存的原理 3. 強緩存的管理 4. ...
    meng_philip123閱讀 1,089評論 4 18