簡單談?wù)勊姆NHTTP緩存控制和用法

為了有效降低瀏覽器多次訪問同一資源造成的時間和數(shù)據(jù)成本授舟,我們通常會利用緩存來優(yōu)化頁面性能逆巍。

緩存控制四種方式

Cache-Control

response.setHeader('Cache-Control','public,max-age=360')

服務(wù)器在響應(yīng)時瞪醋,回傳max-age參數(shù)纱扭,表示緩存時間:xx秒

那么客戶端在下次請求時伦糯,根據(jù)上次回傳的max-age值晶衷,首先判斷緩存的相對時間

如果還未超過時間,則不發(fā)起請求咪啡,直接從Cache中讀取首启。反之,則重新請求撤摸。

Expires

response.setHeader('Expires','Mon Jan 01 2018 08:00:00 GMT') //必須用格林威治時間格式

服務(wù)器在響應(yīng)時毅桃,回傳格林威治時間,表示在次時間內(nèi)的請求直接從Cache中讀取

那么客戶端在下次請求時准夷,根據(jù)上次回傳的時間钥飞,比對客戶端本地時間,

如果本地時間未超過回傳時間衫嵌,則不發(fā)起請求读宙,直接從Cache中讀取。反之楔绞,則重新請求结闸。

缺陷

由于返回的時間比對的是客戶端本地時間唇兑,如果本地時鐘修改,則會導(dǎo)致緩存出現(xiàn)異常

結(jié)論:

以上兩種為早期緩存控制方式桦锄,雖然簡單扎附,但也暴力。如時間上不符合要求則直接放棄HTTP請求结耀,改由Cache讀取留夜。一般使用Cache-Control相對時間形式。

這樣從某種程度上存在不合理因素图甜,如服務(wù)器的確在返回的這段時間內(nèi)修改了頁面內(nèi)容碍粥,則會造成頁面信息不對成『谝悖客戶端依然在訪問舊數(shù)據(jù)嚼摩,但其實服務(wù)器早已更新。

為了解決這個問題矿瘦,程序員早期是通過更改請求url解決的低斋,一般在需要重新請求的頁面后添加一個查詢參數(shù),如:

<link rel = 'stylesheet' href= './style.css?version=1'>
//其中?后面的version=1 即為查詢參數(shù)匪凡,實際無意義膊畴,僅僅為了讓客戶端重新向服務(wù)器請求

Last-Modified

response.setHeader('Last-Modified','Fri,22 Jul 2016 08:00:00 GMT')

服務(wù)器在響應(yīng)時,同樣回傳格林威治時間病游,不同的是唇跨,它表示的是服務(wù)器最新一次對頁面修改的時間

那么客戶端在下次請求時,會通過If-Modified-Since: Last-Modified-value帶上之前回傳回來的時間

如果客戶端傳來的最后修改時間與服務(wù)器上的依然一致衬衬,則直接回送304 和響應(yīng)報頭即可买猖。

如果沒有匹配上,說明服務(wù)器已對頁面做了修改滋尉,則重新相應(yīng)新的頁面并回傳新的Last-Modified

請求響應(yīng)圖.png

此種方式存在缺陷:

1玉控、只要資源修改,無論內(nèi)容是否發(fā)生實質(zhì)性的變化狮惜,都會將該資源返回客戶端高诺。例如周期性重寫,這種情況下該資源包含的數(shù)據(jù)實際上一樣的碾篡。
2虱而、以時刻作為標(biāo)識,無法識別一秒內(nèi)進(jìn)行多次修改的情況开泽。
3牡拇、某些服務(wù)器不能精確的得到文件的最后修改時間。

ETag

response.setHeader('ETag','3f'd729c07839068ebb6f7f4374981d9f') //一般可用MD5

服務(wù)器在響應(yīng)時,回傳一個唯一標(biāo)志符(比如md5)惠呼,服務(wù)器在把頁面響應(yīng)給客戶端的時候导俘,會在實體首部加上“ETag: 唯一標(biāo)識符”一起返回給客戶端

客服端會保留ETag字段,在下次請求時剔蹋,通過在請求中添加if-none-match:ETag-value 給服務(wù)器趟畏,與服務(wù)器的ETag字段進(jìn)行匹配,如果匹配上滩租,則直接回送304 和響應(yīng)報頭即可。反之利朵,則重新發(fā)送資源數(shù)據(jù)并回傳新的ETag字段

結(jié)論:

由于ETag字段是唯一標(biāo)識符律想,能更精確的判斷資源是否修改,一般使用ETag來實現(xiàn)绍弟。但也必須考慮計算ETag值帶來的性能損耗


總結(jié):

Last-Modified/ ETag 屬于同一種緩存類型技即,均需發(fā)起請求,根據(jù)請求來判斷是否304樟遣,從而節(jié)省下載的時間

Cache-Control/Expires 屬于同一種緩存類型而叼,根據(jù)時間數(shù)據(jù)直接判斷是否發(fā)起請求,從而節(jié)省了請求的時間和下載的時間

另外需留意的是:
瀏覽器對用戶發(fā)的第一個請求豹悬,默認(rèn)不緩存
如果請求頭有Cache-Control葵陵,那個瀏覽器就不會在接受響應(yīng)里的Cache-Control
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瞻佛,隨后出現(xiàn)的幾起案子脱篙,更是在濱河造成了極大的恐慌,老刑警劉巖伤柄,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绊困,死亡現(xiàn)場離奇詭異,居然都是意外死亡适刀,警方通過查閱死者的電腦和手機(jī)秤朗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笔喉,“玉大人取视,你說我怎么就攤上這事〕V浚” “怎么了贫途?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長待侵。 經(jīng)常有香客問我丢早,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任怨酝,我火速辦了婚禮傀缩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘农猬。我一直安慰自己赡艰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布斤葱。 她就那樣靜靜地躺著慷垮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揍堕。 梳的紋絲不亂的頭發(fā)上料身,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機(jī)與錄音衩茸,去河邊找鬼芹血。 笑死,一個胖子當(dāng)著我的面吹牛楞慈,可吹牛的內(nèi)容都是我干的幔烛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼囊蓝,長吁一口氣:“原來是場噩夢啊……” “哼饿悬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起聚霜,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤乡恕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后俯萎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傲宜,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年夫啊,在試婚紗的時候發(fā)現(xiàn)自己被綠了函卒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡撇眯,死狀恐怖报嵌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情熊榛,我是刑警寧澤锚国,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站玄坦,受9級特大地震影響血筑,放射性物質(zhì)發(fā)生泄漏绘沉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一豺总、第九天 我趴在偏房一處隱蔽的房頂上張望车伞。 院中可真熱鬧,春花似錦喻喳、人聲如沸另玖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谦去。三九已至,卻和暖如春蹦哼,著一層夾襖步出監(jiān)牢的瞬間鳄哭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工翔怎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杨耙。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓赤套,卻偏偏與公主長得像,于是被迫代替她去往敵國和親珊膜。 傳聞我的和親對象是個殘疾皇子容握,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

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