瀏覽器緩存機(jī)制

瀏覽器緩存辨图,可以使得頁(yè)面加載速度提高膘婶,也減輕服務(wù)端壓力。瀏覽器緩存的過(guò)程(圖示):

1355655874_6620.jpg
555379-20160404211645125-1662003962.png

有幾個(gè)比較重要點(diǎn)如下:

1. 瀏覽器是如何判斷緩存是否過(guò)期会放?

應(yīng)該是根據(jù)Response Header(響應(yīng)頭)里面的Cache-Control和Expires這兩個(gè)屬性顷蟆,當(dāng)兩個(gè)都存在時(shí)胖秒,Cache-Control優(yōu)先級(jí)較高。
Cache-Control
該字段用于控制瀏覽器在什么情況下直接使用本地緩存而不向服務(wù)器發(fā)送請(qǐng)求慕的。一般具有以下值:

  • Public:指示響應(yīng)可被任何緩存區(qū)緩存。
  • Private:指示對(duì)于單個(gè)用戶(hù)的整個(gè)或部分響應(yīng)消息挤渔,不能被共享緩存處理肮街。這允許服務(wù)器僅僅描述當(dāng)用戶(hù)的部分響應(yīng)消息,此響應(yīng)消息對(duì)于其他用戶(hù)的請(qǐng)求無(wú)效判导。
  • no-cache:指示請(qǐng)求或響應(yīng)消息不能緩存嫉父。
  • no-store:用于防止重要的信息被無(wú)意的發(fā)布。在請(qǐng)求消息中發(fā)送將使得請(qǐng)求和響應(yīng)消息都不使用緩存眼刃。
  • max-age:指示瀏覽器可以接收生存期不大于指定時(shí)間(以秒為單位)的響應(yīng)绕辖。
  • min-fresh:指示瀏覽器可以接收響應(yīng)時(shí)間小于當(dāng)前時(shí)間加上指定時(shí)間的響應(yīng)。
  • max-stale:指示瀏覽器可以接收超出超時(shí)期間的響應(yīng)消息擂红。如果指定max-stale消息的值仪际,那么瀏覽器可以接收超出超時(shí)期指定值之內(nèi)的響應(yīng)消息。
    PS:其實(shí)主要關(guān)注max-age這個(gè)值就行了昵骤。
    Expires
    Expires 頭部字段提供一個(gè)日期和時(shí)間树碱,在該日期前的所有對(duì)該資源的請(qǐng)求都會(huì)直接使用瀏覽器緩存而不用向服務(wù)器請(qǐng)求。
    例如:
    Expires: Sun, 08 Nov 2009 03:37:26 GMT
    注意:
  1. cache-control max-age 和 max-stale將覆蓋Expires header变秦。
  2. 使用Expires存在服務(wù)器端時(shí)間和瀏覽器時(shí)間不一致的問(wèn)題成榜。
  3. 另外有人說(shuō)Expires 是HTTP 1.0的東西,現(xiàn)在默認(rèn)瀏覽器均默認(rèn)使用HTTP 1.1蹦玫,所以它的作用基本忽略(暫不明了)赎婚。

2. 服務(wù)端如何判斷緩存已失效?

服務(wù)端通過(guò)If-Modified-Since(Last-Modified)和If-None-Match(Etag)這兩個(gè)屬性的值來(lái)判斷緩存是否失效的樱溉。
Last-Modified/If-Modified-Since
Last-Modified/If-Modified-Since要配合Cache-Control使用挣输。
Last-Modified:響應(yīng)資源的最后修改時(shí)間。
If-Modified-Since:當(dāng)緩存過(guò)期時(shí)饺窿,發(fā)現(xiàn)資源具有Last-Modified聲明歧焦,則在請(qǐng)求頭帶上If-Modified-Since(值就是Last-Modified)。服務(wù)器收到請(qǐng)求后發(fā)現(xiàn)有頭If-Modified-Since則與被請(qǐng)求資源的最后修改時(shí)間進(jìn)行比對(duì)。若最后修改時(shí)間較新绢馍,說(shuō)明資源又被改動(dòng)過(guò)向瓷,則響應(yīng)HTTP 200整片資源內(nèi)容(寫(xiě)在響應(yīng)消息包體內(nèi));若最后修改時(shí)間較舊,說(shuō)明資源無(wú)新修改舰涌,則響應(yīng)HTTP 304猖任,告知瀏覽器繼續(xù)使用所保存的cache。
Etag/If-None-Match
Etag/If-None-Match也要配合Cache-Control使用瓷耙。
Etag:資源在服務(wù)器的唯一標(biāo)識(shí)(生成規(guī)則由服務(wù)器決定)朱躺。Apache中,ETag的值搁痛,默認(rèn)是對(duì)文件的索引節(jié)(INode)长搀,大小(Size)和最后修改時(shí)間(MTime)進(jìn)行Hash后得到的鸡典。
If-None-Match:當(dāng)緩存過(guò)期時(shí)源请,發(fā)現(xiàn)資源具有Etage聲明,則在請(qǐng)求頭帶上If-None-Match(值就是Etag)彻况。服務(wù)器收到請(qǐng)求后發(fā)現(xiàn)有頭If-None-Match 則與被請(qǐng)求資源的相應(yīng)校驗(yàn)串進(jìn)行比對(duì)谁尸,決定返回200或304。

3. 為什么有了Last-Modified還要Etag纽甘?

Etag的出現(xiàn)主要是為了解決幾個(gè)Last-Modified比較難解決的問(wèn)題:

  1. Last-Modified標(biāo)注的最后修改只能精確到秒級(jí)良蛮,如果某些文件在1秒鐘以?xún)?nèi),被修改多次的話(huà)悍赢,它將不能準(zhǔn)確標(biāo)注文件的修改時(shí)間决瞳。
  2. 如果某些文件會(huì)被定期生成,當(dāng)有時(shí)內(nèi)容并沒(méi)有任何變化左权,但Last-Modified卻改變了瞒斩,導(dǎo)致文件沒(méi)法使用緩存。
  3. 有可能存在服務(wù)器沒(méi)有準(zhǔn)確獲取文件修改時(shí)間涮总,或者與代理服務(wù)器時(shí)間不一致等情形胸囱。

4. 200 OK( from cache )和 304 Not Modified的區(qū)別?

200 OK( from cache )不向服務(wù)器發(fā)送請(qǐng)求瀑梗,直接使用本地緩存文件烹笔。304 Not Modified則向服務(wù)器詢(xún)問(wèn),若服務(wù)器認(rèn)為瀏覽器的緩存版本還可用抛丽,那么便會(huì)返回304谤职。
200 OK( from cache ) 出現(xiàn)操作:
1.地址欄回車(chē)
2.頁(yè)面鏈接跳轉(zhuǎn)
3.前進(jìn)、后退
304 Not Modified 出現(xiàn)操作:
1.F5刷新
2.新開(kāi)窗口
PS:但是這樣不是絕對(duì)亿鲜,還是會(huì)有奇怪的情況允蜈,例如百度首頁(yè)無(wú)論是怎么刷冤吨,都是200 from cache。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饶套,一起剝皮案震驚了整個(gè)濱河市漩蟆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妓蛮,老刑警劉巖怠李,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蛤克,居然都是意外死亡捺癞,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)构挤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)髓介,“玉大人,你說(shuō)我怎么就攤上這事筋现“姹#” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵夫否,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我叫胁,道長(zhǎng)凰慈,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任驼鹅,我火速辦了婚禮微谓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘输钩。我一直安慰自己豺型,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布买乃。 她就那樣靜靜地躺著姻氨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪剪验。 梳的紋絲不亂的頭發(fā)上肴焊,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音功戚,去河邊找鬼娶眷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛啸臀,可吹牛的內(nèi)容都是我干的届宠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼豌注!你這毒婦竟也來(lái)了伤塌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤幌羞,失蹤者是張志新(化名)和其女友劉穎寸谜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體属桦,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熊痴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了聂宾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片果善。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖系谐,靈堂內(nèi)的尸體忽然破棺而出巾陕,到底是詐尸還是另有隱情,我是刑警寧澤纪他,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布鄙煤,位于F島的核電站,受9級(jí)特大地震影響茶袒,放射性物質(zhì)發(fā)生泄漏梯刚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一薪寓、第九天 我趴在偏房一處隱蔽的房頂上張望亡资。 院中可真熱鬧,春花似錦向叉、人聲如沸锥腻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瘦黑。三九已至,卻和暖如春奇唤,著一層夾襖步出監(jiān)牢的瞬間供璧,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工冻记, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留睡毒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓冗栗,卻偏偏與公主長(zhǎng)得像演顾,于是被迫代替她去往敵國(guó)和親供搀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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

  • 緩存一直是前端優(yōu)化的主戰(zhàn)場(chǎng), 利用好緩存就成功了一半. 本篇從http請(qǐng)求和響應(yīng)的頭域入手, 讓你對(duì)瀏覽器緩存有個(gè)...
    易斯大大閱讀 784評(píng)論 0 1
  • 瀏覽器緩存機(jī)制钠至,其實(shí)主要就是HTTP協(xié)議定義的緩存機(jī)制(如:Expires葛虐;Cache-control等)。但是也...
    raincoco閱讀 281評(píng)論 0 0
  • 瀏覽器緩存機(jī)制棉钧,其實(shí)主要就是HTTP協(xié)議定義的緩存機(jī)制(如: Expires屿脐; Cache-control等)。但...
    RossWen閱讀 725評(píng)論 0 21
  • 簡(jiǎn)單來(lái)說(shuō)宪卿,瀏覽器緩存就是把一個(gè)已經(jīng)請(qǐng)求過(guò)的資源拷貝一份存儲(chǔ)起來(lái)的诵,當(dāng)下次需要該資源時(shí),瀏覽器會(huì)根據(jù)緩存機(jī)制決定直接使...
    淘淘笙悅閱讀 1,895評(píng)論 2 14
  • 瀏覽器緩存機(jī)制之一(經(jīng)典緩存) 因?yàn)樵诮邮值捻?xiàng)目中用到過(guò)比較新的HTML5應(yīng)用緩存佑钾,也用到了經(jīng)典的緩存如設(shè)置max...
    __七把刀__閱讀 837評(píng)論 0 3