瀏覽器緩存機(jī)制

瀏覽器緩存機(jī)制:瀏覽器緩存機(jī)制,其實(shí)主要就是http協(xié)議定義的緩存機(jī)制(如:Expires;Cache-control等)扒俯。也有非http協(xié)議定義的緩存機(jī)制防症,如html meta標(biāo)簽:<meta http-equiv="Pragma" content="no-cache">,作用是告訴瀏覽器當(dāng)前頁(yè)面不被緩存,每次訪問(wèn)都需要去服務(wù)器拉取捞蛋。
注意:瀏覽器會(huì)在第一次請(qǐng)求完服務(wù)器后得到響應(yīng)吠撮,我們可以在服務(wù)器中設(shè)置這些響應(yīng)尊惰,從而達(dá)到在以后的請(qǐng)求中盡量減少甚至不從服務(wù)器端獲取資源的目的。瀏覽器是依靠請(qǐng)求和響應(yīng)中的頭信息來(lái)控制緩存的泥兰。
讀取緩存的流程:有兩步弄屡,首先根據(jù)約定時(shí)間,約定時(shí)間過(guò)來(lái)再來(lái)判斷下面兩種方式逾条。


image.png

Expires與Cache-Control:就是服務(wù)器端用來(lái)約定和客戶端的有效時(shí)間琢岩。


image.png

Expires規(guī)定了緩存失效(Date為當(dāng)前時(shí)間),而Cache-Control的max-age規(guī)定了緩存有效時(shí)間(2552s)师脂。Expires是http1.0的東西担孔,而Cache-Control是http1.1的,規(guī)定如果max-age和Expires同時(shí)存在吃警,前者優(yōu)先級(jí)高于后者糕篇。Cache-Control的參數(shù)可以設(shè)置如下值:
image.png

為了決定瀏覽器是讀取本地緩存還是去服務(wù)器拉取數(shù)據(jù),就需要判斷服務(wù)器上的文件是否有更新酌心,有以下兩種方式:
一:在上一次服務(wù)器端告訴客戶端約定的有效期的同時(shí)拌消,告訴客戶端該文件最后修改的時(shí)間,當(dāng)再次嘗試從服務(wù)器端下載該文件的時(shí)候安券,check下該文件有沒(méi)有更新(對(duì)比最后修改時(shí)間)墩崩,如果沒(méi)有,則讀取緩存侯勉。(last-Modified / if-Modified-Since 要配合Cache-Control使用)

last-Modified是響應(yīng)頭返回來(lái)的信息鹦筹,是服務(wù)器告訴瀏覽器被請(qǐng)求文件最后一次修改的時(shí)間;當(dāng)瀏覽器再次請(qǐng)求該文件的時(shí)候址貌,請(qǐng)求頭中包含了if-Modified-Since項(xiàng)铐拐,將這個(gè)日期和服務(wù)器端該文件最后一次修改日期對(duì)比徘键,如果相同,則相應(yīng)http304遍蟋,從緩存讀數(shù)據(jù)吹害;如果不相同,文件更新了,則相應(yīng)http200虚青,返回?cái)?shù)據(jù)它呀,同時(shí)通過(guò)響應(yīng)頭更新last-Modified的值。

二:在上一次服務(wù)器端告訴客戶端約定有效期的同時(shí)棒厘,同時(shí)告訴客戶端該文件的版本號(hào)钟些,當(dāng)服務(wù)器端文件更新的時(shí)候,改變版本號(hào)绊谭,再次發(fā)送請(qǐng)求的時(shí)候check一下版本號(hào)是否一致就行了,如一致汪拥,則直接讀取緩存达传。(ETag / if-None-Match 要配合Cache-Control使用 )

ETag并不是文件的版本號(hào),而是一串可以代表該文件唯一的字符串(Apache中迫筑,ETag的值宪赶,默認(rèn)是對(duì)文件的索引節(jié)點(diǎn),大小和最后修改時(shí)間進(jìn)行Hash后得到的脯燃。)搂妻,當(dāng)客戶端發(fā)現(xiàn)和服務(wù)器端約定的直接讀取緩存的時(shí)間過(guò)了,就在請(qǐng)求頭中發(fā)送if-None-Match選項(xiàng)辕棚,值為上次請(qǐng)求后響應(yīng)頭的ETag值欲主,該值在服務(wù)器端和服務(wù)端代表改文件唯一的字符串對(duì)比(如果服務(wù)器端該文件改變了,該值就會(huì)變)逝嚎,如果相同扁瓢,則相應(yīng)http304,客戶端直接讀取緩存补君,否則引几,http200,下載正確的數(shù)據(jù)挽铁,更新ETag值伟桅。

當(dāng)發(fā)送的請(qǐng)求頭中同時(shí)存在if-None-Match和if-Modified-Since時(shí),前者會(huì)優(yōu)先于后者叽掘,忽略后者楣铁。http1.1中ETag的出現(xiàn)主要是為了解決幾個(gè)Last-Modified比較難解決的問(wèn)題:
1.last-Modified標(biāo)注的最后修改只能精確到秒級(jí),如果某些文件在一秒鐘以內(nèi)够掠,被修改多次的話民褂,它將不能準(zhǔn)確標(biāo)注文件的修改時(shí)間。
2.如果某些文件會(huì)被定期生成,但有時(shí)內(nèi)容并沒(méi)有任何變化(僅僅改變了時(shí)間)赊堪,但last-Modified卻改變了面殖,導(dǎo)致文件沒(méi)法使用緩存。
3.有可能存在服務(wù)器沒(méi)有準(zhǔn)確獲取文件修改時(shí)間哭廉,或者與代理服務(wù)器時(shí)間不一致等情況脊僚。

無(wú)法被瀏覽器緩存的請(qǐng)求:
1.http信息頭中包含Cache-Control:no-cache,pragma:no-cache(http1.0),或cache-Control:max-age=0等告訴瀏覽器不用緩存的請(qǐng)求。
2.需要根據(jù)cookie遵绰,認(rèn)證信息等決定輸入內(nèi)容的動(dòng)態(tài)請(qǐng)求是不能被緩存的
3.經(jīng)過(guò)https安全加密的請(qǐng)求
4.Post請(qǐng)求無(wú)法被緩存辽幌。
5.http響應(yīng)頭中不包含last-Modified / Etag,也不包含Cache-Control / Expires的請(qǐng)求無(wú)法被緩存椿访。

用戶行為與緩存:


image.png

當(dāng)用戶在按F5進(jìn)行刷新的時(shí)候乌企,會(huì)忽略Expries/Cache-Control的設(shè)置,會(huì)再次發(fā)送請(qǐng)求去服務(wù)器請(qǐng)求成玫,而Last-Modified/Etag還是有效的加酵,服務(wù)器會(huì)根據(jù)情況判斷返回304還是200;而當(dāng)用戶使用ctrl+F5進(jìn)行強(qiáng)制刷新的時(shí)候哭当,只是所有的緩存機(jī)制都將失效猪腕,重新從服務(wù)器去拉取資源。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末钦勘,一起剝皮案震驚了整個(gè)濱河市陋葡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌彻采,老刑警劉巖腐缤,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異肛响,居然都是意外死亡柴梆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)终惑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绍在,“玉大人,你說(shuō)我怎么就攤上這事雹有〕ザ桑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵霸奕,是天一觀的道長(zhǎng)溜宽。 經(jīng)常有香客問(wèn)我,道長(zhǎng)质帅,這世上最難降的妖魔是什么适揉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任留攒,我火速辦了婚禮,結(jié)果婚禮上嫉嘀,老公的妹妹穿的比我還像新娘炼邀。我一直安慰自己,他們只是感情好剪侮,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布拭宁。 她就那樣靜靜地躺著,像睡著了一般瓣俯。 火紅的嫁衣襯著肌膚如雪杰标。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天彩匕,我揣著相機(jī)與錄音腔剂,去河邊找鬼。 笑死驼仪,一個(gè)胖子當(dāng)著我的面吹牛桶蝎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谅畅,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼噪服!你這毒婦竟也來(lái)了毡泻?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤粘优,失蹤者是張志新(化名)和其女友劉穎仇味,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體雹顺,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丹墨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嬉愧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贩挣。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖没酣,靈堂內(nèi)的尸體忽然破棺而出王财,到底是詐尸還是另有隱情,我是刑警寧澤裕便,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布绒净,位于F島的核電站,受9級(jí)特大地震影響偿衰,放射性物質(zhì)發(fā)生泄漏挂疆。R本人自食惡果不足惜改览,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缤言。 院中可真熱鬧宝当,春花似錦、人聲如沸墨闲。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鸳碧。三九已至盾鳞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞻离,已是汗流浹背腾仅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留套利,地道東北人推励。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像肉迫,于是被迫代替她去往敵國(guó)和親验辞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • 緩存一直是前端優(yōu)化的主戰(zhàn)場(chǎng), 利用好緩存就成功了一半. 本篇從http請(qǐng)求和響應(yīng)的頭域入手, 讓你對(duì)瀏覽器緩存有個(gè)...
    易斯大大閱讀 768評(píng)論 0 1
  • 現(xiàn)代瀏覽器為了最大化的復(fù)用資源喊衫,減少網(wǎng)絡(luò)請(qǐng)求跌造,都提供了緩存機(jī)制。所謂緩存族购,就是在某次網(wǎng)絡(luò)請(qǐng)求過(guò)程中保存的一份資源副...
    柏丘君閱讀 303評(píng)論 0 0
  • 瀏覽器緩存機(jī)制壳贪,其實(shí)主要就是HTTP協(xié)議定義的緩存機(jī)制(如:Expires;Cache-control等)寝杖。但是也...
    raincoco閱讀 278評(píng)論 0 0
  • 簡(jiǎn)單來(lái)說(shuō)违施,瀏覽器緩存就是把一個(gè)已經(jīng)請(qǐng)求過(guò)的資源拷貝一份存儲(chǔ)起來(lái),當(dāng)下次需要該資源時(shí)瑟幕,瀏覽器會(huì)根據(jù)緩存機(jī)制決定直接使...
    淘淘笙悅閱讀 1,890評(píng)論 2 14
  • 瀏覽器緩存 瀏覽器緩存的知識(shí)是前端工程師必須要掌握的磕蒲,因?yàn)檫@些知識(shí)直接影響到你的頁(yè)面的用戶體驗(yàn),影響到你的頁(yè)面的加...
    _Charles閱讀 498評(píng)論 0 3