用途を選んでディレクティブを調整すると、Cache-Control ヘッダーと .htaccess・nginx の設定例を作ります。RFC 9111(HTTP Caching)の用語に沿って説明しています。
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 を出すので、併用すると二重になることがあります。設定後はブラウザの開発者ツールで実際のレスポンスヘッダーを確認してください。
用途プリセットを選び、public・private・no-cache・no-store・max-age・s-maxage・immutable・stale-while-revalidate などを組み合わせて Cache-Control ヘッダーを作ります。あわせて .htaccess(mod_headers)と nginx の設定例を出し、矛盾する組み合わせには注意を表示します。
no-cache は保存してよいが使う前に毎回サーバーへ確認する指定、no-store はどこにも保存しない指定です。ツールで両方にチェックすると、no-store があれば他は意味がないという注意が出ます。
よく使われるのは「public, max-age=31536000, immutable」です。ファイル名に中身のハッシュが入るので、更新時はURLが変わります。プリセット「ハッシュ付き静的ファイル」で作れます。
更新をすぐ反映したいなら「no-cache」で毎回確認させるのが一般的で、変更がなければ 304 で軽く済みます。プリセット「HTML」がこの設定です。
365日換算で31536000秒です。「秒数 ⇔ 日数の換算」に日数を入れると秒数が出ます。秒数欄の横にも「=1年(365日換算)」のように表示されます。