Skip to content

キャッシュの挙動

ブラウザからのリクエストに対し、LightFile Proxyがどのように応答を返し、CloudFrontにキャッシュ期間を指定するか解説します。

全体像

ブラウザからのリクエストに対し、CloudFrontおよびLightFile Proxyは以下のようにキャッシュを再利用しながら、画像をWebPに変換し、適切な画像を応答します。

ありなしいいえはいなしありはいいいえありなしCFキャッシュ?CF応答WebP対応?オリジン応答 ロングLFキャッシュ?オリジン応答 ショート有効期限内?LF応答 ロングオリジン変更?オリジン応答 ショートLF応答 ロング期間延長バックグラウンド 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)以外の応答が返された場合

オリジンへのリクエストの結果、エラー(ステータスコード4XX5XX)やリダイレクト(ステータスコード3XX)が返却された場合、LightFile Proxyはそのまま同じレスポンスをリレーします。

ただしこのとき、エラーにはエラーキャッシュ期間(デフォルト5分)を適用します。リダイレクトの場合はロングキャッシュ期間(デフォルト1日)が適用されます。