← ハシトシステム トップ English ツール ブログ
入力
解析結果

Cache-Control の値を入れると、ディレクティブの意味と矛盾がここに出ます。

Cache-Control の読み方

Cache-Control はカンマ区切りのディレクティブの並びです。順番に意味はなく、書いた順に評価されるわけでもありません。効き方は「誰に対する指示か」で決まります。max-age はすべてのキャッシュに、s-maxage は共有キャッシュ(CDN・プロキシ)だけに効き、only-if-cached のようにリクエスト側でしか意味を持たないものもあります。応答ヘッダにリクエスト用のディレクティブを書いても無視されるだけで、警告は出ません。

このツールは、ブラウザのキャッシュと共有キャッシュを分けて新鮮期間を計算します。Age ヘッダを入れると、そこから何秒残っているかも出します。Age は、その応答が中継のキャッシュに入ってから何秒経ったかを表す値です。

よくある矛盾

書き方実際に起きること
no-store, max-age=60no-store が勝つ。60秒の指定は意味を持たない
public, private意味が正反対。どちらが勝つかは実装依存
no-cache, max-age=600毎回オリジンへ確認が入るので、600秒は実質効かない
private, s-maxage=300共有キャッシュは保存しないので、s-maxage の宛先が無い
max-age=1h整数でないので属性ごと無視される。1時間にはならない

新鮮期間が切れた後

stale-while-revalidate は、新鮮期間が切れてからの猶予です。この秒数のあいだ、キャッシュは古い応答をすぐ返しつつ、裏でオリジンに取りに行けます。利用者から見ると待ち時間が増えません。stale-if-error は、オリジンがエラーを返したときに古い応答で凌いでよい秒数です。どちらも max-ages-maxage があって初めて起点が決まります。

解析はすべてブラウザ内で行っています。判定は RFC 9111(HTTP Caching)と、拡張ディレクティブを定めた RFC 5861 に基づいています。

よくある質問(FAQ)

no-cache と no-store はどう違いますか?

no-cache は保存を許しますが、再利用の前に必ずオリジンへ確認させます。no-store はそもそも保存させません。個人情報を含む応答に付けるべきなのは no-store のほうです。名前から受ける印象と役割が逆になりやすい組み合わせです。

max-age と s-maxage の両方を書くとどうなりますか?

ブラウザは max-age を、CDN やプロキシなどの共有キャッシュは s-maxage を見ます。s-maxage があるとき、共有キャッシュは max-age を無視します。CDN では長く、ブラウザでは短く保持させたいときに使い分けます。

immutable を付けたのに再検証が走ります。

immutable は新鮮なあいだにだけ効きます。max-age が無い、または 0 だと、そもそも新鮮な時間が存在しないため効果がありません。ファイル名にハッシュを含む配信物に、長い max-age と組み合わせて使います。

入力した値はサーバーに送られますか?

いいえ。解析はすべてブラウザ内の JavaScript で行います。貼り付けたヘッダがネットワークに出ることはありません。