HTTP から見える共有キャッシュを経由する画像レスポンスには、明示的な存続期間とバリデータを公開します。画像をユーザー間で再利用しても安全な場合、レスポンスヘッダーの例は次のとおりです。

Cache-Control: public, max-age=604800
ETag: "image-v4"

存続期間の単位は秒で、604800 は 1 週間です。public はユーザー間で再利用する想定のコンテンツにのみ使います。

ブラウザと共有プロキシで異なる存続期間が必要なら、s-maxage が共有キャッシュの存続期間を指定します。たとえば max-age=3600 と s-maxage=604800 を組み合わせると、共有キャッシュには長い鮮度期間が与えられます。

Expires は期間ではなく日時

Expires は HTTP 日時形式のタイムスタンプを受け取ります。max-age はそのフィールドを上書きし、共有キャッシュでは s-maxage が優先されます。レスポンスを生成するときに任意の Expires 日時を生成してください。

再読み込みは検証を要求できる

Cache-Control: no-cache を含むリクエスト は、保存されたレスポンスを再利用する前に、オリジンでの検証成功を求めます。これは、レスポンスの通常の鮮度ポリシーなら本来は再利用を許す場合でも起こりえます。

バリデータがあれば、キャッシュは変化していない画像を効率よく確認できます。304 レスポンスは、画像のバイト列をオリジンから再送せずに、保存された表現を確認できます。したがってオリジンへの通信自体は、キャッシュされたオブジェクトが破棄されたことを意味しません。

ポリシーを見直すときは、通常の再利用と明示的な再読み込みを比較してください。

関連記事