Cache-Control作成

用途を選んでディレクティブを調整すると、Cache-Control ヘッダーと .htaccess・nginx の設定例を作ります。RFC 9111(HTTP Caching)の用語に沿って説明しています。

誰がキャッシュしてよいか

動き

秒数で指定するもの(delta-seconds)

ヘッダー

Apache(.htaccess・mod_headers)

nginx(add_header)

秒数 ⇔ 日数の換算

日 = 秒

max-age などの秒数は、レスポンスが作られてからの経過秒数(Age)で数えます。RFC 9111 では 2147483648 秒(約68年)より大きい値はその値として扱ってよいとされ、実務では1年(31536000秒)がよく使われます。

immutable は RFC 8246、stale-while-revalidate・stale-if-error は RFC 5861 の拡張です。対応状況はブラウザ・CDN ごとに違うので、各サービスの公式ドキュメントで確認してください。

nginx の add_header は、内側のブロックに1つでも書くと外側の add_header を引き継がなくなります。expires 命令も Cache-Control を出すので、併用すると二重になることがあります。設定後はブラウザの開発者ツールで実際のレスポンスヘッダーを確認してください。

Cache-Controlヘッダー作成でできること

用途プリセットを選び、public・private・no-cache・no-store・max-age・s-maxage・immutable・stale-while-revalidate などを組み合わせて Cache-Control ヘッダーを作ります。あわせて .htaccess(mod_headers)と nginx の設定例を出し、矛盾する組み合わせには注意を表示します。

使い方

  1. 上のボタンから「ハッシュ付き静的ファイル」「画像など(ハッシュなし)」「HTML」「API(共有キャッシュ短め)」「非公開(個人情報など)」のどれかを選びます。
  2. 「誰がキャッシュしてよいか」「動き」のチェックと、「秒数で指定するもの」の秒数を調整します。秒数は「1時間」「1日」「1年」などのボタンでも入れられます。
  3. 注意・メモ欄で矛盾や効かない組み合わせがないか確認します。
  4. 「ヘッダー」「Apache(.htaccess・mod_headers)」「nginx(add_header)」の出力を「コピー」で写します。.htaccess と nginx は「対象の拡張子」で対象ファイルを絞れます。

計算の仕組みと注意点

よくある質問

no-cache と no-store の違いは?

no-cache は保存してよいが使う前に毎回サーバーへ確認する指定、no-store はどこにも保存しない指定です。ツールで両方にチェックすると、no-store があれば他は意味がないという注意が出ます。

ハッシュ付きのJS・CSSにはどんなCache-Controlがよいですか?

よく使われるのは「public, max-age=31536000, immutable」です。ファイル名に中身のハッシュが入るので、更新時はURLが変わります。プリセット「ハッシュ付き静的ファイル」で作れます。

HTMLはキャッシュさせないほうがいいですか?

更新をすぐ反映したいなら「no-cache」で毎回確認させるのが一般的で、変更がなければ 304 で軽く済みます。プリセット「HTML」がこの設定です。

max-age を1年にすると何秒ですか?

365日換算で31536000秒です。「秒数 ⇔ 日数の換算」に日数を入れると秒数が出ます。秒数欄の横にも「=1年(365日換算)」のように表示されます。