理解瀏覽器的緩存

  1. 緩存是用來做什么的?
    從我們在瀏覽器輸入地址再按下回車以后,瀏覽器會向服務(wù)器依次進(jìn)行DNS查詢辙培、初始化鏈接、發(fā)送請求以及等待服務(wù)器響應(yīng)邢锯,這些都會耗費(fèi)一定的時間扬蕊。這些過程結(jié)束之后,就會從服務(wù)器上下載相應(yīng)的內(nèi)容丹擎,這也會耗費(fèi)一定的時間尾抑。但是,如果我這次要下載的內(nèi)容和上一次一模一樣的話鸥鹉,那就可以從緩存中獲取這些內(nèi)容蛮穿,不必再從服務(wù)器上下載庶骄,進(jìn)而節(jié)約內(nèi)容的下載時間毁渗,這就是緩存的作用。

  2. 設(shè)置Cache-Control
    這是一種比較老的設(shè)置緩存的方法单刁,在服務(wù)端對相應(yīng)文件(比如:example.css)的響應(yīng)頭設(shè)置Cache-Control:public,max-age=3600,這樣灸异,以后在請求example.css時府适,就不會從服務(wù)器上下載文件而是從緩存里拿文件了。而緩存的時間就是上面設(shè)置的3600秒肺樟,在這3600秒之內(nèi)瀏覽器都只從緩存里讀取example.css檐春,過了3600秒才會再次從服務(wù)器上讀取文件。

  3. 問題:如果我的example.css在這3600秒之內(nèi)發(fā)生變化了怎么辦么伯?如何讓變化了的example.css被下載而不是從緩存當(dāng)中讀取舊的example.css呢疟暖?
    首先,默記以下真理:緩存都是依據(jù)url來實(shí)現(xiàn)的田柔。相應(yīng)的俐巴,只要把example.css改為example_1.css再重新設(shè)置下服務(wù)器路徑,那么瀏覽器就會根據(jù)新的url來請求相應(yīng)的文件硬爆,而不會再從緩存中拿了欣舵。當(dāng)然,這是非常舊的方法缀磕,五年前的前端是這么干的缘圈。

  4. 至少有一個文件不應(yīng)該被緩存
    如果html文件被緩存了,那么依托這個html文件的其它c(diǎn)ss和JS文件即便更改了路徑也無法請求到了袜蚕,這就要求這個html文件不應(yīng)該被緩存糟把。而瀏覽器對于用戶發(fā)的第一個請求默認(rèn)不緩存。這樣的話牲剃,其它的文件有更改了才會有被從服務(wù)器讀取的機(jī)會糊饱。

  5. Expires
    一般不和Cache-Control共用。不推薦使用expires颠黎。它同樣是在響應(yīng)頭里添加一個Expires另锋,它的值是一個格林梅治時間,在這個時間之前會一直緩存狭归,這個時間之后會再次從服務(wù)器上下載相應(yīng)的文件夭坪。

Expires的問題及與Cache-Control的區(qū)別:Expires設(shè)置的一個絕對時間,比如說設(shè)置的緩存過期時間為2018年1月1日过椎,而它的對比時間是用戶的本地時間室梅。如果用戶把自己電腦的時鐘調(diào)快了一年的話,那這個緩存時間就無效了疚宇。相對的亡鼠,Cache-Control設(shè)置的相對時間,即當(dāng)內(nèi)容下載之后的時間敷待,不會受到用戶本地時間的影響间涵。

  1. Last-modified
    不推薦使用。它設(shè)置的是一個資源的最后修改時間榜揖,舉個例子勾哩,一個資源的Last-modified時間為2016年8月1日抗蠢,而今天的時間為2017年8月1日,當(dāng)瀏覽器讀取到這個資源的最后修改時間時思劳,它就會認(rèn)為迅矛,既然這個資源過去一年都沒有修改過,那么將來可能也不會修改潜叛,于是就會給一個啟發(fā)式的緩存時間秽褒,一般來說是Last-modified值距離現(xiàn)在時間的10%;

  2. ETag

想理解ETag就需要首先理解md5。md5是一種算法威兜,它接受一個輸入震嫉,是任意字符串,輸出是一個32位的字符串牡属。它的經(jīng)常用來定兩個不知道內(nèi)容的東西是否是相等的票堵。

當(dāng)在響應(yīng)頭中使用了ETag時,資源會被哈希(可以是md5也可以是其它算法)逮栅,這個哈希值是唯一的悴势。它和內(nèi)容一樣會返回給瀏覽器,當(dāng)瀏覽器下次再請求這個資源時措伐,之前的哈希值會在請求頭if-none-match一同發(fā)送給服務(wù)器特纤,服務(wù)器會再計(jì)算一次這個資源的哈希值,并且把它和瀏覽器請求過來的if-none-match值進(jìn)行比對侥加,如果二者是一樣的捧存,這就表示這個資源沒有更改過,那就從緩存中直接拿就行担败,如果值不一樣的話念祭,那就表示這個資源有更新鼠渺,那就從服務(wù)器下載這個資源的更新版本趁窃。

因?yàn)樗形募贾挥幸粋€哈希值旋廷,一個文件在被修改前后,它的哈希值是不一樣的狈网。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宙搬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拓哺,更是在濱河造成了極大的恐慌勇垛,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件士鸥,死亡現(xiàn)場離奇詭異闲孤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)础淤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門崭放,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸽凶,你說我怎么就攤上這事币砂。” “怎么了玻侥?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵决摧,是天一觀的道長。 經(jīng)常有香客問我凑兰,道長掌桩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任姑食,我火速辦了婚禮波岛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘音半。我一直安慰自己则拷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布曹鸠。 她就那樣靜靜地躺著煌茬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪彻桃。 梳的紋絲不亂的頭發(fā)上坛善,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機(jī)與錄音邻眷,去河邊找鬼眠屎。 笑死,一個胖子當(dāng)著我的面吹牛肆饶,可吹牛的內(nèi)容都是我干的组力。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抖拴,長吁一口氣:“原來是場噩夢啊……” “哼燎字!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起阿宅,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤候衍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后洒放,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛉鹿,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年往湿,在試婚紗的時候發(fā)現(xiàn)自己被綠了妖异。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惋戏。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖他膳,靈堂內(nèi)的尸體忽然破棺而出响逢,到底是詐尸還是另有隱情,我是刑警寧澤棕孙,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布舔亭,位于F島的核電站,受9級特大地震影響蟀俊,放射性物質(zhì)發(fā)生泄漏钦铺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一肢预、第九天 我趴在偏房一處隱蔽的房頂上張望矛洞。 院中可真熱鬧,春花似錦烫映、人聲如沸缚甩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽擅威。三九已至,卻和暖如春冈钦,著一層夾襖步出監(jiān)牢的瞬間郊丛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工瞧筛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厉熟,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓较幌,卻偏偏與公主長得像揍瑟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乍炉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

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