キャッシュ情報を示す、Cache-Status レスポンスヘッダ

リクエストに対して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
fwd-stored

fwd-storedパラメータは、リクエストをフォワードした際にそのレスポンスを保存したかを示します。

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

複数のCDNを利用する場合

先述の通り、複数のCDNを通る場合はそのつど追記されます。

Cache-Status: "CDN Company Here"; res-fresh=545,
              OriginCache; cache-fresh=1100; collapse-hit=?1