Cache-Control: max-age ディレクティブは、CloudFront や ブラウザなどのキャッシュ機構に対してこのコンテンツは何秒間キャッシュしてよいかを指示する HTTP ヘッダーです。
✅ max-age の基本
Cache-Control: max-age=3600
これは、「このレスポンスは、取得後3600秒(=1時間)までは再取得せずキャッシュを使ってよい」という意味です。
✅ CloudFront との関係
CloudFront はオリジンからのレスポンスに Cache-Control ヘッダーが含まれている場合、以下のように動作します:
| ヘッダー設定 | CloudFrontのキャッシュ動作 | 
|---|---|
Cache-Control: max-age=N | 
N秒間、CloudFrontでキャッシュ | 
Cache-Control: no-cache | 
キャッシュはするが、毎回オリジンに検証 | 
Cache-Control: no-store | 
キャッシュしない | 
Cache-Control: public | 
共有キャッシュ(CloudFront含む)を許可 | 
Cache-Control: private | 
ブラウザなどのユーザー専用キャッシュのみ | 
✅ 使用例:長めのキャッシュ設定
Cache-Control: public, max-age=86400
- すべての中継キャッシュ(CloudFront含む)が 1日(86400秒)キャッシュ可能。
 
✅ CloudFront キャッシュ期間の優先順位
CloudFront がオブジェクトをどれくらいキャッシュするかを判断する優先度:
- オリジンの 
Cache-Control: max-age - オリジンの 
Expiresヘッダー(max-ageより優先度は低い) - ディストリビューションのキャッシュポリシー設定(明示的に上書き可能)
 
✅ CloudFront キャッシュポリシーで上書きする場合
CloudFront 側でオリジンのヘッダーを無視して max-age を上書きするには、キャッシュポリシーで TTL を設定します:
- 最小 TTL(Minimum TTL)
 - 最大 TTL(Maximum TTL)
 - デフォルト TTL(Default TTL)
 
例:デフォルトで 1 時間キャッシュし、最長でも 1 日キャッシュ
Default TTL: 3600
Min TTL: 0
Max TTL: 86400
✅ 補足:更新頻度に応じた設定
- 静的ファイル(画像、CSS、JS など):
max-age=31536000(1年)+バージョニング(?v=2など) - 動的コンテンツや頻繁に変わるAPIレスポンス:
max-age=0, no-cacheなどで都度取得