キャッシュの挙動
ブラウザからのリクエストに対し、LightFile Proxyがどのように応答を返し、CloudFrontにキャッシュ期間を指定するか解説します。
全体像
ブラウザからのリクエストに対し、CloudFrontおよびLightFile Proxyは以下のようにキャッシュを再利用しながら、画像をWebPに変換し、適切な画像を応答します。
以下に各ケースの詳細を解説します。
CloudFrontにキャッシュがある場合
CloudFrontにキャッシュがある場合は、その画像データを即座に返却してLightFile Proxyへのリクエストは発生しません。
WebP対応ブラウザはAccept
リクエストヘッダにimage/webp
を明示的に含みます。CloudFrontでキャッシュキーにAccept
ヘッダを指定することで、ブラウザに応じたキャッシュとレスポンスを制御し、画像フォーマットの混線を防ぎます。
WebP対応ブラウザからのリクエスト
キャッシュがまだ存在しない場合
画像に対するはじめてのリクエストはもちろんのこと、定期的なクリーニングでキャッシュが削除された画像についてもこのケースが適用されます。
LightFile Proxyは、JPEG/PNG/GIFの画像をショートキャッシュ
期間(デフォルト10秒)でいったんレスポンスし、バックグラウンドでWebPへの変換を行います。
ショートキャッシュ期間は短いため、CloudFrontではほとんどキャッシュは行われません。WebPへの変換ができたころに再びLightFile Proxyにリクエストが発生する目論見です。
有効期間内のWebPキャッシュが存在する画像へのリクエスト
リクエストされた画像のWebPキャッシュが存在し、かつ有効期間内の場合、LightFile Proxyは変換済みのWebPデータをロングキャッシュ
期間(デフォルト1日)でレスポンスします。
キャッシュは存在するが期限切れの画像へのリクエスト
LightFile ProxyのWebPキャッシュはロングキャッシュ
期間(デフォルト1日)を有効期限としてキャッシュされます。
しかしオリジン側の画像データは変更される可能性があります。変更に追従し、WebPキャッシュを更新する仕組みがあります。
オリジンに変更なしの場合
LightFile Proxy上にWebPキャッシュがあるものの有効期限が切れるている場合、まずHEAD
リクエストによるオリジンへの変更確認が行われます。
ETag
またはLast-Modified
レスポンスヘッダにより、LightFile ProxyのWebPキャッシュ作成時から変更がないと判断されると、WebPキャッシュの有効期限を再びロングキャッシュ
期間だけ延長してレスポンスします。
オリジンに変更ありの場合
一方、オリジンへの変更確認の結果、LightFile ProxyのWebPキャッシュ作成時から変更があると判断されると、オリジンから新しいJPEG/PNG/GIF画像データを取得します。
ここからはWebPキャッシュがまだ作成されていないケースと同じく、いったんJPEG/PNG/GIF画像をショートキャッシュ
期間(デフォルト10秒)でレスポンスします。そして変更された画像をバックグラウンドでWebPに変換します。
WebP非対応ブラウザからのリクエスト
WebP非対応ブラウザからのリクエストは、無条件にオリジンにリクエストをリレーし、JPEG/PNG/GIF画像をロングキャッシュ
期間(デフォルト1日)でレスポンスします。
対応する画像のWebPキャッシュがない場合は、WebP対応ブラウザからのリクエストに備え、バックグラウンドで画像をWebPに変換します。
オリジンから正常(コード2XX)以外の応答が返された場合
オリジンへのリクエストの結果、エラー(ステータスコード4XX
や5XX
)やリダイレクト(ステータスコード3XX
)が返却された場合、LightFile Proxyはそのまま同じレスポンスをリレーします。
ただしこのとき、エラーについてはエラーキャッシュ
期間(デフォルト5分)、リダイレクトについてはロングキャッシュ
期間(デフォルト1日)を適用します。