Skip to content
所有文章 ‹ Part 06 of 18 · Cache 不是方塊,是一條鏈
工程 · 2 min read

Cache header:誰設定,誰讀取

每個 cache header 都有設定的人和讀取的人。整理標準 header、Akamai 的除錯 header,以及沒有規則讀取就毫無作用的自訂 header。

每個 cache header 都有設定的人和讀取的人。只有一方在場,header 就沒有作用。

我以前看 header,只看它的名字和值。這次我學會多問一句:誰會讀它?

origin 設定 Cache-Control / ETag CDN 讀取並遵守 CDN 設定 Age / X-Cache 下一層和 browser 讀取 CDN 設定 自訂 header 只有寫了規則的那層讀取
標準 header 預設就有人讀,自訂 header 只有寫了規則的那層才會讀。

標準 header

Header誰設定誰讀取範例
Cache-Controlorigin每一層 cachepublic, max-age=3600
Expiresorigin舊式 cache一個絕對時間
Age每一層 cache下一層 cacheage: 54
ETagorigincache 用來比對版本"32b7140e..."
If-None-Matchcache 刷新時origin帶上舊的 ETag

CDN 自己的 header(以 Akamai 為例,每家名稱不同)

Header用途
X-Cacheedge 這一層的結果,例如 TCP_HIT
X-Cache-Remote第二層(tiered cache)的結果
Pragma: akamai-x-cache-on我在 request 加上它,Akamai 才會回 X-Cache 和 X-Cache-Remote

我們自己加的 header

Header誰加誰讀
X-Cache-Bypass: yesAkamai 加在每個送往 origin 的 request只有寫了規則的 LB cache 後端
x-use-proxy: 1Akamai 加在副檔名是 html、css、js 的 requestload balancer 用它選 proxy 後端

我第一次看到 X-Cache-Bypass,以為它是 HTTP 標準。它不是。沒有規則讀它的 cache,會直接忽略它。這句話就是 Bypass header 只在有規則的地方有效 的全部原因。

自訂 header 不是命令,它只是一張便條。沒人讀,就等於沒寫。

延伸閱讀:一個 HTTP request、Cache 的新鮮度:fresh、stale 和 304、CDN 名詞一頁表、三個地方都在設定 TTL、Bypass header 只在有規則的地方有效。或回到系列總覽。

↑↓ 移動 ↵ 開啟 esc 關閉