跳到主要內容

淺談HTTP的快取機制


Cache for what?

簡單的說是為了節省流量 > 後端不能總是一直回復同樣的內容吧, 非常浪費資源

所以我們可以在Client端把訪問過的內容快取起來, 待下次要用時再直接從這兒拿出來

Expire


目前存在的方法是在HEADER加入Expires日期

Expires: Wed, 21 Oct 2017 07:28:00 GMT

告訴瀏覽器指定期間內, 相同的請求的話, 就去讀快取

Cache Control, max-age


除了指定明確日期之外, 我們也可以指定保存期限

Cache-Control: max-age=30

告訴瀏覽器, 快取的資料只有三十秒的保存期限

除此之外,

我們也可以在HEADER加入檔案的最後修改時間

Last-Modified

Cache-Control: max-age=31536000 
Last-Modified: 2017-01-01 13:00:00

目的是, 資料過期後, 瀏覽器可以用這個日期去詢問伺服器, 快取內的資料有沒有必要更新

If-Modified-Since: 2017-01-01 13:00:00

如果資料不變, 當然就繼續用嘍

除了用日期外,

另一個方法是使用ETag來判別檔案有沒有被修改

ETag


簡單的說, ETag有點像檔案內容的hash值
當檔案一改變ETag就會不一樣

所以瀏覽器可以根據後端給的ETag,
詢問伺服器使否要更新快取的內容還是繼續沿用原本的資料

Server Response Header

ETag: "25749G2" 

Browser Request Header

if-None-Match: 25749G2




留言