把複雜的事情簡單說
這裡只簡略講,所以可以視為入門,
師傅帶入門後,進階的修行就要看各人了
【提要】
網頁快取:內容留存一份,方便下次取用
網頁快取的目的:節省流量、節省時間
快取分層:
Browser (local storage) -> proxy server / CDN -> Web Server -> Cache Server -> DB Server
【說明】
快取的目的就是要節省流量,加速反應時間,
因此網頁常用但不常變動的資料(如圖片、圖示),
通常會在本地端有暫存或備份。
這個暫存的動作,就是快取 (Cache)。
網路的世界中的動作稱為 Request,
每個 Request 經過的節點會包含 Browser -> proxy server -> Web Server -> Cache Server -> DB Server 等。
網路世界中,所有的動作都有成本(時間 / 流量),
為了節省成本,在經過的節點會有相關的暫存機制。
【說明】
下圖為 AWS 針對快取與相關機制提供的概觀圖,
從 Users 到 Database (DB),
途中會經過 Devices (Mobile / Desktop) / Internet / Web Content / Applications 等節點,
表格內則有提到 AWS 在對應的節點有提供的快取服務。
舉例來說,Redis 是很常見的快取資料庫,
AWS 在 Web / Applications / DB 層,皆有提供 Redis 服務,
實務上則依照業務需求或商業邏輯使用,不一定在每一層都會有 Redis 快取。
本文提到的 Browser 主要指 Device 端的快取,
通常指 Browser (瀏覽器) 自身的 Local Storage。
(資料來源:快取概觀)
【提要】
如何判斷 Request 是否使用快取?
有兩個判斷依據:過期時間、內容變動。
- 判斷過期時間 => Expires / Cache-Control
Header
資料
Expires
過期時間
Cache-Control
public:公開的資源,可以被所有節點暫存
private:私有的資源,只被允許儲存成使用者的本地快取
no-cache:有 Cache,使用前會發 Request 問是否過期
no-store:完全不 Cache
max-age:快取過期秒數
Last-Modified / If-Modified-Since - 判斷資料是否變動了 => ETag / If-None-Match
【補充說明】
- 當 Request 的 Header 中包含了 expires 與 max-age 時,會以 max-age 為優先。
有 Cache 可使用的狀況下:
動作 | Http Status | 網路流量 | 反應速度 |
輸入網址 / 回上一步 | 200 OK (from cache) | 少(0) | 快 |
F5 / 畫面重整 | 304 Not Modified | 中 | 中 |
Ctrl + F5 | 200 OK | 多 | 慢 |
更詳細的說明可以參考以下文件: