HTTP緩存是web性能優化的一個常識,目的是當你第二次請求時,將JS、CSS、的請求速度加快,可是html卻不能設置Cache-Control
,這是爲何,能夠想想html
response.setHeader('Cache-Control','max-age=315360000')
響應設置響應頭,max-age
是設置緩存停留時間,單位爲秒,從你接收到那個響應開始計時,通常是設置10年或者1年web
設置Cache-Control
能夠在一段時間內不訪問服務器,直接用本地內存或者硬盤中獲取響應,所以極大的加快了訪問速度,關鍵在於不會發送HTTP請求。算法
當緩存那麼久,那若是緩存資源更新了怎麼辦緩存
?v=...
這樣就能夠更新緩存了說到ETag
就不得不提md5摘要算法,這個算法能夠計算一個文件,而後生成一串字符,相同文件內容生成的字符串是同樣的,若是內容不相同生成的字符串就會不同,而且內容差異越小,字符串差異越大性能優化
response.setHeader('ETag', fileMd5)
fileMd5
就是md5生成的字符串服務器
設置了ETag
後,之後每次訪問服務器都要設置頭If-None-Match
來帶上那串字符串,資源未變動,服務器就會返回304,和Cache-Control
不一樣就是,ETag仍是會請求,不過資源不變的話,響應體是空的。性能
這就很是簡單了,當服務器更換了一個資源,那生成的字符串就會不同,當If-None-Match
帶着原來的字符串來比較時,發現字符串不同,那就會下載新的資源優化
Expires
也是一個響應頭,功能和Cache-Control
差很少,可是如今逐漸被淘汰了,而且若是在Cache-Control
響應頭設置了 "max-age" 或者 "s-max-age" 指令,那麼Expires
頭會被忽略。
究其緣由是由於Expires
也是設置時間來作期限,可是它設置的是到期時間,而且要是GMT格式的時間,最致命的是它的到期時間是依據系統時間來看的,若是系統時間錯誤超過了Expires
的到期時間,那麼就會請求不到資源。url