初解 HTTP 緩存

Cache-Control

但願某請求被緩存,加一個響應頭javascript

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

max-age=300000000表示300000000s內再次執行,直接從緩存中讀取內容,不請求,下載時間爲0,不會從新下載css

 

注意:html

1.首頁不要設置緩存,特別是htmljava

2.一般max-age設置的時間比較長,如有升級或改變,修改URL便可,能夠加一個查詢參數,如./style.css?v=2算法

 

Expires

response.setHeader('Expires','Mon, 12 Aug 2019 06:11:29 GMT')

設置時間爲某時刻,表示一旦過了該時刻,將會要從新下載。npm

問題:若用戶本地時間錯亂,緩存將可能會當即失效。緩存

 

問:Cache-Control與Expires的區別?app

1.Cache-Control是設置時間長度,Expires是設置時間點,推薦使用Cache-Control,由於若客戶本地時間一旦錯亂,Expires設置緩存可能會受到影響,可能會當即失效。ide

2.若兩個都設置了,會優先使用Cache-Control,由於Cache-Control是新版API。ui

 

ETag

var md5 = require('md5')

if(path === './main.js'){
let string = fs.readFileSync('./main.js','utf-8')
    response.setHeader('Content-Type','application/javascript;charset=utf-8')
    let fileMd5 = md5(string)
    response.setHeader('ETag',fileMd5)
    if(request.headers['if-none-match'] === fileMd5){
        response.statusCode = 304 //沒有響應體
    }else{
        response.write(string) //有響應體
    }
}

 

 

*Md5摘要算法 

 

問:Cache-Control與ETag的區別?

若是用Cache-Control,是直接不請求,ETag會產生請求(Md5相同的狀況下),可是不下載,有響應頭,可是響應體是空的。推薦使用Cache-Control。

相關文章
相關標籤/搜索