リクエストに対してx-cacheレスポンスヘッダでキャッシュにhitしたか示すCDNベンダーもあります。
しかし、このx-cacheヘッダは各ベンダー独自のもので標準化されていませんでした。
そこでCache-Statusというヘッダをちゃんと定義する「The Cache-Status HTTP Response Header」という仕様がFastlyのMark Nottingham氏から出ています。
以前まではcacheヘッダという名前でしたが、draft 01ではCache-Statusヘッダと改称されました。それにあわせてヘッダ値もリファクタされています。
前の仕様は以前書いた通りです。
asnokaze.hatenablog.com
Cache-Statusヘッダ
Cache-Statusは以下のようになります。「Structured Headers for HTTP」の定義に従ってリスト構造を持ちます。
Cache-Status: ExampleCache; fwd=res-stale; fwd-res=notmod
まず、このCache-Statusヘッダをつけたサーバの識別子(CDN名)が付きます。そのあとに、キャッシュに関する情報がつきます。(複数CDNを経由する場合は、そのつど追記されていきます。)
続くパラメータは以下の通りです。
fwd パラメータ
fwdパラメータは、リクエストがフォワードされた理由を示します。
- none: リクエストはフォワードされてません (キャッシュにhitし、それが使用されました)
- bypass: リクエストなんの処理もしないように設定されています
- uri-miss: リクエストのURIにマッチするキャッシュがありません
- vary-miss: リクエストのURIにマッチしましたが、ヘッダに基づいてマッチするキャッシュがありませんでした
- miss: キャッシュにhitしませんでした (uri-missとvary-missを区別なく使用できる)
- res-stale: キャッシュにマッチするものがありましたが、すでに有効ではなくなっていました
- req-stale: キャッシュはありましたが、リクエストのCache-Controlリクエストディレクティブに基づいて、使用できませんでした
fwd-res
fwd-resパラメータは、リクエストを転送して受け取ったレスポンスの結果を示します。
- full: 完全なレスポンス (304, 206以外)
- partial: 206 Partial Response
- notmod: 304 Not Modified
res-fresh
res-freshパラメータはレスポンスの残りのFreshness(有効時間)を秒で示します。
Cache-Status: ExampleCache; res-fresh=376
cache-fresh
cache-freshパラメータは、持ってたキャッシュを返した際に、その残りのFreshness(有効時間)を秒で示します。
collapse-hit
キャッシュサーバが同じHTTPリクエストを同時に複数受信した場合は、そのうち1つだけを転送し、受け取ったレスポンスを複数リクエストに対して返す実装もあります。
collapse-hitは、ほかのHTTPリクエストと束ねられたかをしめします。
collapse-wait
collapse-waitパラメータは、ほかのHTTPリクエストに束ねられた場合の待ち時間をミリ秒で示します
Cache-Status: ExampleCache; fwd=uri-miss; collapse-hit=?0; collapse-wait=240