HTTP 快取

快取參數

Expires

驗證資源是否有編輯過,HTTP/1.0就存在,設定資源的快取策略。

協商請求/回應 Header

Client :if-Modified-Since

Server:Last-Modified

ETag

驗證資源是否有變化,若未更新,則不回傳檔案。

主要解決了 Last-Modified/If-Modified-Since 解決不了的問題

文件被修改了,但是內容沒有任何變化的時候,expires 仍會返回 304。

協商請求/回應 Header

Client : if-None-Match

Server:ETag

根據 RFC2616 協定,max-age 覆寫 expires header (HTTP/1.0) 的設定, 讓 expires header 作為 fall back 的機制。

Pragma

HTTP/1.0就存在,與 Cache-Control 比較,優先級最高

使用方法只有一種,Pragma: no-cache,效果和 Cache-Control 中的 no-cache 一致

根據 RFC7232 的說法,這個用法應該跟Cache-Control: no-cache一樣,而不是Cache-Control:no-store

Cache-Control

HTTP/1.1 中新增的属性,每個資源都可以設定回應標頭來定義策略, 取代了HTTP/1.0的快取策略。

  • 主要用於決定是否要求更新檔案,又分為:

    • no-cache:表示永遠檢查快取,要求伺服器時必須以 ETag 確認是否更新,若無更新則不需回應。

    • no-store:表示禁止儲存快取每次都必須向伺服器要求,適用於私人或機密資料。

  • 可快取回應的使用者,又分為:

    • public:可共所有中繼設備和瀏覽器存取。例如ISP存取、CDN快取、瀏覽器快取。

    • private:只限單一使用者快取。

  • must-revalidate:表示可使用快取檔案,過期必定要去伺服器驗證是否有新檔案

  • max-age:快取時限,以為單位,若設定的時間過期了,則必須要跟伺服器要更新後的檔案。

Vary

https://www.fastly.com/blog/best-practices-using-vary-header https://segmentfault.com/a/1190000022701393

流程圖

思考

max-age : 0Cache-Control : no-cache 的差異

https://stackoverflow.com/questions/1046966/whats-the-difference-between-cache-control-max-age-0-and-no-cache

參考資料

https://segmentfault.com/a/1190000022596286 https://cythilya.github.io/2018/07/27/http-caching/ https://blog.techbridge.cc/2017/06/17/cache-introduction/ https://roadmap.sh/guides/http-caching https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=zh-tw%EF%BC%89

Last updated

Was this helpful?