Cache-Control、ETag和過期的Expires

前記

HTTP緩存是web性能優化的一個常識,目的是當你第二次請求時,將JS、CSS、的請求速度加快,可是html卻不能設置Cache-Control,這是爲何,能夠想想html

Cache-Control

如何用

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

響應設置響應頭,max-age是設置緩存停留時間,單位爲秒,從你接收到那個響應開始計時,通常是設置10年或者1年web

功能

設置Cache-Control能夠在一段時間內不訪問服務器,直接用本地內存或者硬盤中獲取響應,所以極大的加快了訪問速度,關鍵在於不會發送HTTP請求算法

更新資源

當緩存那麼久,那若是緩存資源更新了怎麼辦緩存

  • 能夠添加查詢參數,如?v=...這樣就能夠更新緩存了
  • 還有就是能夠在入口html文件處把url變一下,和之前的都不同,也能夠更新緩存
  • 還有就是在文件名前面生成一串字符,變動文件名,也能夠更新緩存

ETag

說到ETag就不得不提md5摘要算法,這個算法能夠計算一個文件,而後生成一串字符,相同文件內容生成的字符串是同樣的,若是內容不相同生成的字符串就會不同,而且內容差異越小,字符串差異越大性能優化

如何用

response.setHeader('ETag', fileMd5)

fileMd5就是md5生成的字符串服務器

功能

設置了ETag後,之後每次訪問服務器都要設置頭If-None-Match來帶上那串字符串,資源未變動,服務器就會返回304,和Cache-Control不一樣就是,ETag仍是會請求,不過資源不變的話,響應體是空的。性能

更新資源

這就很是簡單了,當服務器更換了一個資源,那生成的字符串就會不同,當If-None-Match帶着原來的字符串來比較時,發現字符串不同,那就會下載新的資源優化

過期的Expires

Expires也是一個響應頭,功能和Cache-Control差很少,可是如今逐漸被淘汰了,而且若是在Cache-Control響應頭設置了 "max-age" 或者 "s-max-age" 指令,那麼Expires頭會被忽略。
究其緣由是由於Expires也是設置時間來作期限,可是它設置的是到期時間,而且要是GMT格式的時間,最致命的是它的到期時間是依據系統時間來看的,若是系統時間錯誤超過了Expires的到期時間,那麼就會請求不到資源。url

相關文章
相關標籤/搜索