工程 · 2 min read
Cache header:誰設定,誰讀取
每個 cache header 都有設定的人和讀取的人。整理標準 header、Akamai 的除錯 header,以及沒有規則讀取就毫無作用的自訂 header。
每個 cache header 都有設定的人和讀取的人。只有一方在場,header 就沒有作用。
我以前看 header,只看它的名字和值。這次我學會多問一句:誰會讀它?
標準 header
| Header | 誰設定 | 誰讀取 | 範例 |
|---|---|---|---|
Cache-Control | origin | 每一層 cache | public, max-age=3600 |
Expires | origin | 舊式 cache | 一個絕對時間 |
Age | 每一層 cache | 下一層 cache | age: 54 |
ETag | origin | cache 用來比對版本 | "32b7140e..." |
If-None-Match | cache 刷新時 | origin | 帶上舊的 ETag |
CDN 自己的 header(以 Akamai 為例,每家名稱不同)
| Header | 用途 |
|---|---|
X-Cache | edge 這一層的結果,例如 TCP_HIT |
X-Cache-Remote | 第二層(tiered cache)的結果 |
Pragma: akamai-x-cache-on | 我在 request 加上它,Akamai 才會回 X-Cache 和 X-Cache-Remote |
我們自己加的 header
| Header | 誰加 | 誰讀 |
|---|---|---|
X-Cache-Bypass: yes | Akamai 加在每個送往 origin 的 request | 只有寫了規則的 LB cache 後端 |
x-use-proxy: 1 | Akamai 加在副檔名是 html、css、js 的 request | load balancer 用它選 proxy 後端 |
我第一次看到 X-Cache-Bypass,以為它是 HTTP 標準。它不是。沒有規則讀它的 cache,會直接忽略它。這句話就是 Bypass header 只在有規則的地方有效 的全部原因。
自訂 header 不是命令,它只是一張便條。沒人讀,就等於沒寫。
延伸閱讀:一個 HTTP request、Cache 的新鮮度:fresh、stale 和 304、CDN 名詞一頁表、三個地方都在設定 TTL、Bypass header 只在有規則的地方有效。或回到系列總覽。