與緩存相關(guān)的報文頭
request頭
① 當瀏覽器請求一個資源時,不希望緩存此資源,會發(fā)送以下請求頭:(如果你chrome打開開發(fā)者工具,并且設(shè)定不要緩存時,你的每一條http請求都會帶上下面兩條。注意和max-age=0的區(qū)別)
Cache-Control:no-cache
Progma:no-cache //這條是為了支持HTTP1.0
② 當瀏覽器請求一個資源,并表示不需要緩存服務(wù)器過問,而是直接向服務(wù)器驗證時,會發(fā)送以下請求頭:
Cache-Control:max-age=0
③ 當瀏覽器請求一個資源,且自己有一份該資源的緩存時,會這樣驗證自己已有緩存的新鮮度(有沒有過期):
If-Modified-Since: Mon, 19 Nov 2015 08:38:01 GMT
If-None-Match: "0693f67a67cc1:0"
response頭
① 當服務(wù)器不希望瀏覽器緩存這份資源時:
Cache-Control:no-cache //提醒瀏覽器盡量不要緩存這個資源,下次還要從服務(wù)器請求它
Cache-Control:no-store //禁止服務(wù)器緩存它
② 當服務(wù)器希望瀏覽器緩存這個資源時:
Date:Mon, 19 Nov 2015 08:38:01 GMT //這份資源是我2015-11-19 08:38:01發(fā)給你的
Cache-Control:max-age=60 //這份資源你緩存60秒,60秒后過期(相對時間)
Expire:Mon, 19 Nov 2015 08:39:01 GMT //這份資源這個時候過期(絕對時間)
Last-Modified:Mon, 19 Nov 2014 08:39:01 GMT //這份資源最后修改日期是在2014年~
ETag:"0693f67a67cc1:0" //這份資源的驗證碼,你留著有用
約定一下,以下內(nèi)容,如果瀏覽器發(fā)送包含內(nèi)容①的請求頭,我會說“請求①”,同理,請求②③,返回200+②之類的。如果瀏覽器請求頭不包含以上任何頭,我會直接說“請求”,同理,直接說“返回200”。
瀏覽器緩存策略(chrome)(重要的啦!測了好多種情況總結(jié)出來噠~)
基于上面的論述,來說說瀏覽器緩存資源的策略,
- 只有當返回200+②時,瀏覽器會緩存資源,除此之外,瀏覽器不會緩存發(fā)來的資源。
- 如果瀏覽器已經(jīng)緩存了資源,但新接收到的返回是200不加②,那么已經(jīng)緩存的資源會被清除掉。
- 如果一個資源已經(jīng)被緩存了,那么下次請求這個資源的時候會請求③。
- 只要返回304,那么瀏覽器會在緩存中尋找該資源,找到了即使用,找不到無可奈何。
- 無論如何,只要返回②,瀏覽器都會更新緩存時間。