瀏覽器緩存機制

瀏覽器緩存機制族购,其實主要就是HTTP協(xié)議定義的緩存機制(如:Expires劈伴;Cache-control等)豫柬。但是也有非HTTP協(xié)議定義的緩存機制八堡,如使用HTML Meta標簽陨闹,Web開發(fā)者可以在HTML頁面的節(jié)點中加入標簽楞捂,代碼如下:


上述代碼的作用是告訴瀏覽器當前頁面不被緩存,每次訪問都需要去服務器拉取正林。使用上很簡單泡一,但只有部分瀏覽器可以支持,而且所有緩存代理服務器都不支持觅廓,因為代理不解析HTML內(nèi)容本身鼻忠。

下面我主要介紹HTTP協(xié)議定義的緩存機制。

Expires策略

Expires是Web服務器響應消息頭字段杈绸,在響應http請求時告訴瀏覽器在過期時間前瀏覽器可以直接從瀏覽器緩存取數(shù)據(jù)帖蔓,而無需再次請求。

下面是寶寶PK項目中瞳脓,瀏覽器拉取jquery.js web服務器的響應頭:

注:Date頭域表示消息發(fā)送的時間塑娇,時間的描述格式由rfc822定義。例如劫侧,Date: Mon,31 Dec 2001 04:25:57GMT埋酬。

Web服務器告訴瀏覽器在2012-11-28 03:30:01這個時間點之前,可以使用緩存文件烧栋。發(fā)送請求的時間是2012-11-28 03:25:01写妥,即緩存5分鐘。

不過Expires是HTTP 1.0的東西审姓,現(xiàn)在默認瀏覽器均默認使用HTTP 1.1珍特,所以它的作用基本忽略。

Cache-control策略(重點關注)

Cache-Control與Expires的作用一致魔吐,都是指明當前資源的有效期扎筒,控制瀏覽器是否直接從瀏覽器緩存取數(shù)據(jù)還是重新發(fā)請求到服務器取數(shù)據(jù)莱找。只不過Cache-Control的選擇更多,設置更細致嗜桌,如果同時設置的話奥溺,其優(yōu)先級高于Expires

http協(xié)議頭Cache-Control

值可以是public症脂、private谚赎、no-cache、no- store诱篷、no-transform壶唤、must-revalidate、proxy-revalidate棕所、max-age

各個消息中的指令含義如下:

Public指示響應可被任何緩存區(qū)緩存闸盔。

Private指示對于單個用戶的整個或部分響應消息,不能被共享緩存處理琳省。這允許服務器僅僅描述當用戶的部分響應消息迎吵,此響應消息對于其他用戶的請求無效。

no-cache指示請求或響應消息不能緩存

no-store用于防止重要的信息被無意的發(fā)布针贬。在請求消息中發(fā)送將使得請求和響應消息都不使用緩存击费。

max-age指示客戶機可以接收生存期不大于指定時間(以秒為單位)的響應。

min-fresh指示客戶機可以接收響應時間小于當前時間加上指定時間的響應桦他。

max-stale指示客戶機可以接收超出超時期間的響應消息蔫巩。如果指定max-stale消息的值,那么客戶機可以接收超出超時期指定值之內(nèi)的響應消息快压。

還是上面那個請求圆仔,web服務器返回的Cache-Control頭的值為max-age=300,即5分鐘(和上面的Expires時間一致蔫劣,這個不是必須的)坪郭。

Last-Modified/If-Modified-Since

Last-Modified/If-Modified-Since要配合Cache-Control使用。

lLast-Modified:標示這個響應資源的最后修改時間脉幢。web服務器在響應請求時歪沃,告訴瀏覽器資源的最后修改時間。

lIf-Modified-Since:當資源過期時(使用Cache-Control標識的max-age)嫌松,發(fā)現(xiàn)資源具有Last-Modified聲明沪曙,則再次向web服務器請求時帶上頭If-Modified-Since,表示請求時間豆瘫。web服務器收到請求后發(fā)現(xiàn)有頭If-Modified-Since則與被請求資源的最后修改時間進行比對珊蟀。若最后修改時間較新菊值,說明資源又被改動過外驱,則響應整片資源內(nèi)容(寫在響應消息包體內(nèi))育灸,HTTP 200;若最后修改時間較舊昵宇,說明資源無新修改磅崭,則響應HTTP 304 (無需包體,節(jié)省瀏覽)瓦哎,告知瀏覽器繼續(xù)使用所保存的cache砸喻。

Etag/If-None-Match

Etag/If-None-Match也要配合Cache-Control使用。

lEtag:web服務器響應請求時蒋譬,告訴瀏覽器當前資源在服務器的唯一標識(生成規(guī)則由服務器覺得)割岛。Apache中,ETag的值犯助,默認是對文件的索引節(jié)(INode)癣漆,大小(Size)和最后修改時間(MTime)進行Hash后得到的剂买。

lIf-None-Match:當資源過期時(使用Cache-Control標識的max-age)惠爽,發(fā)現(xiàn)資源具有Etage聲明,則再次向web服務器請求時帶上頭If-None-Match(Etag的值)瞬哼。web服務器收到請求后發(fā)現(xiàn)有頭If-None-Match則與被請求資源的相應校驗串進行比對,決定返回200或304

既生Last-Modified何生Etag郑藏?

你可能會覺得使用Last-Modified已經(jīng)足以讓瀏覽器知道本地的緩存副本是否足夠新鲤孵,為什么還需要Etag(實體標識)呢?HTTP1.1中Etag的出現(xiàn)主要是為了解決幾個Last-Modified比較難解決的問題:

lLast-Modified標注的最后修改只能精確到秒級讨越,如果某些文件在1秒鐘以內(nèi)两残,被修改多次的話,它將不能準確標注文件的修改時間

l如果某些文件會被定期生成把跨,當有時內(nèi)容并沒有任何變化人弓,但Last-Modified卻改變了,導致文件沒法使用緩存

l有可能存在服務器沒有準確獲取文件修改時間着逐,或者與代理服務器時間不一致等情形

Etag是服務器自動生成或者由開發(fā)者生成的對應資源在服務器端的唯一標識符崔赌,能夠更加準確的控制緩存。Last-Modified與ETag是可以一起使用的耸别,服務器會優(yōu)先驗證ETag健芭,一致的情況下,才會繼續(xù)比對Last-Modified秀姐,最后才決定是否返回304慈迈。

用戶行為與緩存

瀏覽器緩存行為還有用戶的行為有關!J∮小痒留!


瀏覽器第一次請求:

瀏覽器再次請求時:

參考鏈接:

http://www.cnblogs.com/skynet/archive/2012/11/28/2792503.html

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谴麦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子伸头,更是在濱河造成了極大的恐慌匾效,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恤磷,死亡現(xiàn)場離奇詭異面哼,居然都是意外死亡,警方通過查閱死者的電腦和手機扫步,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門魔策,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人河胎,你說我怎么就攤上這事代乃。” “怎么了仿粹?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵搁吓,是天一觀的道長。 經(jīng)常有香客問我吭历,道長堕仔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任晌区,我火速辦了婚禮摩骨,結果婚禮上,老公的妹妹穿的比我還像新娘朗若。我一直安慰自己恼五,他們只是感情好,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布哭懈。 她就那樣靜靜地躺著灾馒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪遣总。 梳的紋絲不亂的頭發(fā)上睬罗,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音旭斥,去河邊找鬼容达。 笑死,一個胖子當著我的面吹牛垂券,可吹牛的內(nèi)容都是我干的花盐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼算芯!你這毒婦竟也來了啄栓?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤也祠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后近速,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诈嘿,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年削葱,在試婚紗的時候發(fā)現(xiàn)自己被綠了奖亚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡析砸,死狀恐怖昔字,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情首繁,我是刑警寧澤作郭,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站弦疮,受9級特大地震影響夹攒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜胁塞,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一咏尝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧啸罢,春花似錦编检、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至衩匣,卻和暖如春累驮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舵揭。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工谤专, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人午绳。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓置侍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蜡坊,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

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

  • 緩存一直是前端優(yōu)化的主戰(zhàn)場, 利用好緩存就成功了一半. 本篇從http請求和響應的頭域入手, 讓你對瀏覽器緩存有個...
    易斯大大閱讀 784評論 0 1
  • 瀏覽器緩存機制杠输,其實主要就是HTTP協(xié)議定義的緩存機制(如: Expires; Cache-control等)秕衙。但...
    RossWen閱讀 725評論 0 21
  • 簡單來說蠢甲,瀏覽器緩存就是把一個已經(jīng)請求過的資源拷貝一份存儲起來,當下次需要該資源時据忘,瀏覽器會根據(jù)緩存機制決定直接使...
    淘淘笙悅閱讀 1,895評論 2 14
  • 瀏覽器緩存機制之一(經(jīng)典緩存) 因為在接手的項目中用到過比較新的HTML5應用緩存鹦牛,也用到了經(jīng)典的緩存如設置max...
    __七把刀__閱讀 837評論 0 3
  • 瀏覽器緩存 瀏覽器緩存的知識是前端工程師必須要掌握的,因為這些知識直接影響到你的頁面的用戶體驗勇吊,影響到你的頁面的加...
    _Charles閱讀 505評論 0 3