HTTP緩存

HTTP頭信息控制緩存

http1.0 時代緩存字段詳解

一:Pragma
Pragma:設(shè)置頁面是否緩存蔽莱,為Pragma則緩存砌溺,no-cache則不緩存

當(dāng)該字段值為no-cache的時候,會知會客戶端不要對該資源讀緩存碴裙,即每次都得向服務(wù)器發(fā)一次請求才行逝段。

二:Expires
有了Pragma來禁用緩存私股,自然也需要有個東西來啟用緩存和定義緩存時間刷允,對http1.0而言,Expires就是做這件事的首部字段碧囊。 Expires的值對應(yīng)一個GMT(格林尼治時間)树灶,比如Mon, 22 Jul 2002 11:12:01 GMT來告訴瀏覽器資源緩存過期時間,如果還沒過該時間點則不發(fā)請求糯而。

如果Pragma頭部和Expires頭部同時存在天通,則起作用的會是Pragma,需要注意的是熄驼,響應(yīng)報文中Expires所定義的緩存時間是相對服務(wù)器上的時間而言的像寒,其定義的是資源“失效時刻”,如果客戶端上的時間跟服務(wù)器上的時間不一致(特別是用戶修改了自己電腦的系統(tǒng)時間)瓜贾,那緩存時間可能就沒啥意義了诺祸。,那緩存時間可能就沒啥意義了祭芦。

http1.1 時代緩存字段詳解

cache-control
由于Expires是先對服務(wù)器無法保證筷笨,無法保證和客戶端時間統(tǒng)一,http1.1新增了 Cache-Control 來定義緩存過期時間。
注意:若報文同時出現(xiàn)了 Expires 和 Cache-Control胃夏,則以 Cache-Control 為準(zhǔn)轴或。
優(yōu)先級:Pragma->cache-control->expires

注意:Cache-Control: no-cache:這個很容易讓人產(chǎn)生誤解,使人誤以為是響應(yīng)不被緩存仰禀。實際上Cache-Control: no-cache是會被緩存的 - 這個會告知代理服務(wù)器不直接緩存照雁,而向原服務(wù)器請求緩存。
Cache-Control: no-store:這個才是響應(yīng)不被緩存的意思答恶。

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

  • Last-Modified:這個相應(yīng)的最后修改時間。
  • If-Modified-Since: 當(dāng)資源過期時(使用Cache-Control標(biāo)識的max-age)亥宿,發(fā)現(xiàn)資源具有Last-Modified聲明卸勺,則再次向web服務(wù)器請求時帶上頭 If-Modified-Since,表示請求時間烫扼。web服務(wù)器收到請求后發(fā)現(xiàn)有頭If-Modified-Since 則與被請求資源的最后修改時間進(jìn)行比對曙求。若最后修改時間較新,說明資源又被改動過映企,則響應(yīng)整片資源內(nèi)容(寫在響應(yīng)消息包體內(nèi))悟狱,HTTP 200;若最后修改時間較舊堰氓,說明資源無新修改挤渐,則響應(yīng)HTTP 304 (無需包體,節(jié)省瀏覽)双絮,告知瀏覽器繼續(xù)使用所保存的cache浴麻。

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

  • Etag web服務(wù)器響應(yīng)請求時囤攀,告訴瀏覽器當(dāng)前資源在服務(wù)器的唯一標(biāo)識
  • If-None-Match:當(dāng)資源過期時(使用Cache-Control標(biāo)識的max-age)软免,發(fā)現(xiàn)資源具有Etage聲明,則再次向web服務(wù)器請求時帶上頭If-None-Match (Etag的值)焚挠。web服務(wù)器收到請求后發(fā)現(xiàn)有頭If-None-Match 則與被請求資源的相應(yīng)校驗串進(jìn)行比對膏萧,決定返回200或304。

既生Last-Modified何生Etag
HTTP1.1中Etag的出現(xiàn)主要是為了解決幾個Last-Modified比較難解決的問題

  • Last-Modified標(biāo)注的最后修改只能精確到秒級蝌衔,如果某些文件在1秒鐘以內(nèi)榛泛,被修改多次的話,它將不能準(zhǔn)確標(biāo)注文件的修改時間
  • 如果某些文件會被定期生成噩斟,當(dāng)有時內(nèi)容并沒有任何變化曹锨,但Last-Modified卻改變了,導(dǎo)致文件沒法使用緩存
  • 有可能存在服務(wù)器沒有準(zhǔn)確獲取文件修改時間剃允,或者與代理服務(wù)器時間不一致等情形

Etag是服務(wù)器自動生成或者由開發(fā)者生成的對應(yīng)資源在服務(wù)器端的唯一標(biāo)識符艘希,能夠更加準(zhǔn)確的控制緩存硼身。Last-Modified與ETag是可以一起使用的,服務(wù)器會優(yōu)先驗證ETag覆享,一致的情況下佳遂,才會繼續(xù)比對Last-Modified,最后才決定是否返回304撒顿。

總結(jié):瀏覽器緩存策略分為:強(qiáng)緩存丑罪、協(xié)商緩存

一:強(qiáng)緩存
實現(xiàn)強(qiáng)緩存可以通過兩種響應(yīng)頭實現(xiàn):Expires 和 Cache-Control 。強(qiáng)緩存表示在緩存期間不需要請求凤壁,state code 為 200

二:協(xié)商緩存
如果緩存過期了吩屹,我們就可以使用協(xié)商緩存來解決問題。協(xié)商緩存需要請求拧抖,如果緩存有效會返回 304煤搜。

協(xié)商緩存需要客戶端和服務(wù)端共同實現(xiàn),和強(qiáng)緩存一樣唧席,也有兩種實現(xiàn)方式擦盾。

Last-Modified 和 If-Modified-Since
Last-Modified 表示本地文件最后修改日期,If-Modified-Since 會將 Last-Modified 的值發(fā)送給服務(wù)器淌哟,詢問服務(wù)器在該日期后資源是否有更新迹卢,有更新的話就會將新的資源發(fā)送回來。

但是如果在本地打開緩存文件徒仓,就會造成 Last-Modified 被修改腐碱,所以在 HTTP / 1.1 出現(xiàn)了 ETag 。

ETag 和 If-None-Match
ETag 類似于文件指紋掉弛,If-None-Match 會將當(dāng)前 ETag 發(fā)送給服務(wù)器症见,詢問該資源 ETag 是否變動,有變動的話就將新的資源發(fā)送回來殃饿。并且 ETag 優(yōu)先級比 Last-Modified 高谋作。

參考:為什么要使用web緩存?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市壁晒,隨后出現(xiàn)的幾起案子瓷们,更是在濱河造成了極大的恐慌业栅,老刑警劉巖秒咐,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異碘裕,居然都是意外死亡携取,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門帮孔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雷滋,“玉大人不撑,你說我怎么就攤上這事∥钫叮” “怎么了焕檬?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長澳泵。 經(jīng)常有香客問我实愚,道長,這世上最難降的妖魔是什么兔辅? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任腊敲,我火速辦了婚禮,結(jié)果婚禮上维苔,老公的妹妹穿的比我還像新娘碰辅。我一直安慰自己,他們只是感情好介时,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布没宾。 她就那樣靜靜地躺著,像睡著了一般潮尝。 火紅的嫁衣襯著肌膚如雪榕吼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天勉失,我揣著相機(jī)與錄音羹蚣,去河邊找鬼。 笑死乱凿,一個胖子當(dāng)著我的面吹牛顽素,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播徒蟆,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼胁出,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了段审?” 一聲冷哼從身側(cè)響起全蝶,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寺枉,沒想到半個月后抑淫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡姥闪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年始苇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筐喳。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡催式,死狀恐怖函喉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荣月,我是刑警寧澤管呵,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站哺窄,受9級特大地震影響撇寞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜堂氯,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一蔑担、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咽白,春花似錦啤握、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至授段,卻和暖如春蹲蒲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侵贵。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工届搁, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窍育。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓卡睦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親漱抓。 傳聞我的和親對象是個殘疾皇子表锻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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