コンテンツがキャッシュに保持される期間 (有効期限) の管理 - Amazon CloudFront

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

コンテンツがキャッシュに保持される期間 (有効期限) の管理

が別のリクエストをオリジン CloudFront に転送するまでのファイルを CloudFront キャッシュに保持する期間を制御できます。この期間を短くすると、動的なコンテンツを供給できます。この期間を長くすると、ユーザー側のパフォーマンスは向上します。ファイルがエッジキャッシュから直接返される可能性が高くなるためです。期間を長くすると、オリジンの負荷も軽減されます。

通常、 は、指定したキャッシュ期間が経過するまで、つまりファイルの有効期限が切れるまで、エッジロケーションからファイル CloudFront を保存します。有効期限が切れると、エッジロケーションが次にファイルのリクエストを受け取ったときに、キャッシュにファイルの最新バージョンが含まれていることを確認するリクエストをオリジン CloudFront に転送します。オリジンからのレスポンスは、ファイルが変更されたかどうかによって異なります。

  • CloudFront キャッシュに最新バージョンがすでに存在する場合、オリジンはステータスコード を返します304 Not Modified

  • CloudFront キャッシュに最新バージョンがない場合、オリジンはステータスコード200 OKとファイルの最新バージョンを返します。

エッジロケーションのファイルが頻繁にリクエストされない場合は、有効期限が切れる前にファイルを削除して、最近リクエストされたファイル用のスペースを確保 CloudFront できます。

デフォルトでは、各ファイルは 24 時間後に自動的に有効期限切れになりますが、2 つの方法でこのデフォルトの動作を変更できます。

[Minimum TTL (最小 TTL)]、[Default TTL (デフォルト TTL)]、[Maximum TTL (最大 TTL)] が max-age ディレクティブ、s-maxage ディレクティブ、Expires ヘッダーフィールドとどのように連動するかの詳細については、「がオブジェクトを CloudFront キャッシュする時間を指定する」を参照してください。

また、オリジンに別のリクエストを転送して、リクエストされたオブジェクトの取得を CloudFront 再試行するまでのエラー ( など404 Not Found) のCloudFront キャッシュへの保持期間を制御することもできます。詳細については、「がオリジンからの HTTP 4xx および 5xx ステータスコード CloudFront を処理してキャッシュする方法」を参照してください。

ヘッダーを使用した個々のオブジェクトのキャッシュ保持期間の制御

Cache-Control および Expires ヘッダーを使用して、オブジェクトをキャッシュに保持する期間を制御できます。[Minimum TTL]、[Default TTL]、[Maximum TTL] の設定もキャッシュ保持期間に影響を与えますが、ここでは、ヘッダーがキャッシュ保持期間に与える影響について概要を示します。

  • Cache-Control max-age ディレクティブを使用すると、 がオリジンサーバーからオブジェクトを再度 CloudFront 取得するまでに、オブジェクトをキャッシュに保持する期間 (秒単位) を指定できます。が CloudFront サポートする最小有効期限は 0 秒です。最大値は 100 (年) です。値は次の形式で指定します。

    Cache-Control: max-age=

    例えば、次のディレクティブは、関連付けられたオブジェクトを 3600 秒 (1 時間) キャッシュに保持 CloudFront するように に指示します。

    Cache-Control: max-age=3600

    オブジェクトをブラウザキャッシュに保持する期間とは異なる期間 CloudFront エッジキャッシュに保持する場合は、 Cache-Control max-ageおよび Cache-Control s-maxageディレクティブを一緒に使用できます。詳細については、「がオブジェクトを CloudFront キャッシュする時間を指定する」を参照してください。

  • Expires ヘッダーフィールドでは、「RFC 2616、ハイパーテキスト転送プロトコル –– HTTP/1.1 セクション 3.3.1、完全な日付」に規定された形式を使用して、有効期限切れ日時を指定できます。

    Sat, 27 Jun 2015 23:59:59 GMT

オブジェクトのキャッシュを制御するには、Cache-Control max-age ヘッダーフィールドではなく、Expires ディレクティブを使用することをお勧めします。Cache-Control max-ageExpires の両方の値を指定した場合、CloudFront は Cache-Control max-age の値のみを使用します。

詳細については、「がオブジェクトを CloudFront キャッシュする時間を指定する」を参照してください。

ビューワーからのGETリクエストで HTTP Cache-Controlまたは Pragmaヘッダーフィールドを使用して、オブジェクトのオリジンサーバー CloudFront に強制的に戻ることはできません。 は、ビューワーリクエストのこれらのヘッダーフィールド CloudFront を無視します。

Cache-Control および Expires ヘッダーフィールドの詳細については、「RFC 2616、ハイパーテキスト転送プロトコル –– HTTP/1.1」の以下のセクションを参照してください。

古い (期限切れの) コンテンツの提供

CloudFront は、 Stale-While-Revalidateおよび Stale-If-Errorキャッシュ制御ディレクティブをサポートします。

  • stale-while-revalidate ディレクティブにより、 CloudFront はキャッシュから古いコンテンツを供給できますが、オリジンから新しいバージョンを非同期的に取得します。これにより、ユーザーはバックグラウンドフェッチを待たずに CloudFrontのエッジロケーションからすぐにレスポンスを受信し、今後のリクエストに備えて新しいコンテンツがバックグラウンドでロードされるため、レイテンシーが向上します。

    次の例では、 はレスポンスを 1 時間 CloudFront キャッシュします (max-age=3600)。この期間以降にリクエストが行われた場合、 は古いコンテンツCloudFront を提供し、同時にキャッシュされたコンテンツを再検証して更新するリクエストをオリジンに送信します。コンテンツが再検証される間、古いコンテンツは最大 10 分間 (stale-while-revalidate=600) 提供されます。

    Cache-Control: max-age=3600, stale-while-revalidate=600
  • stale-if-error ディレクティブは CloudFront 、オリジンに到達できない場合、または 500~600 のエラーコードを返す場合、 がキャッシュから古いコンテンツを配信できるようにします。これにより、ビューワーはオリジンが停止しているときでもコンテンツにアクセスできるようになります。

    次の例では、 はレスポンスを 1 時間 CloudFront キャッシュします (max-age=3600)。オリジンがダウンしている場合、またはこの期間が経過した後にエラーを返した場合、 CloudFront は、最大 24 時間 () 古いコンテンツを引き続き提供しますstale-if-error=86400

    Cache-Control: max-age=3600, stale-if-error=86400
    注記

    stale-if-error と の両方のカスタムエラーレスポンスが設定されている場合、 CloudFront は、指定されたstale-if-error期間内にエラーが発生した場合に、古いコンテンツを提供しようとします。古いコンテンツが使用できない場合、またはコンテンツが stale-if-error 期間を超えている場合、 は対応するエラーステータスコードに設定されたカスタムエラーレスポンス CloudFront を保存します。

両方一緒に使用する

stale-while-revalidate および stale-if-error は独立したキャッシュ制御ディレクティブで、これらを一緒に使用することでレイテンシーを減らしたり、オリジンが応答または回復するためのバッファを追加したりできます。

次の例では、 はレスポンスを 1 時間 CloudFront キャッシュします (max-age=3600)。この期間を過ぎてリクエストが行われた場合、 は、コンテンツが再検証されている間、最大 10 分間 (stale-while-revalidate=600) 古いコンテンツCloudFront を提供します。がコンテンツを再検証しようとしたときにオリジンサーバーがエラーを返 CloudFront した場合、 CloudFront は最大 24 時間 () 古いコンテンツを引き続き提供しますstale-if-error=86400

Cache-Control: max-age=3600, stale-while-revalidate=600, stale-if-error=86400
ヒント

キャッシュによって、パフォーマンスと鮮度が保たれます。stale-while-revalidatestale-if-error などのディレクティブを使用すると、パフォーマンスとユーザーエクスペリエンスが向上しますが、コンテンツをどれだけ新鮮にするかの希望に合った設定にしてください。古いコンテンツディレクティブは、コンテンツを更新する必要があるが、最新バージョンであることが重要でない場合に最適です。さらに、コンテンツが変更されないか、ほとんど変更されない場合、stale-while-revalidate は不要なネットワークリクエストを追加する可能性があります。代わりに、キャッシュ期間を長く設定することを検討してください。

がオブジェクトを CloudFront キャッシュする時間を指定する

オリジンに別のリクエストを送信する前に、 がオブジェクトをキャッシュに CloudFront 保持する時間を制御するには、次の操作を行います。

  • CloudFront ディストリビューションのキャッシュ動作で、最小、最大、およびデフォルトの TTL 値を設定します。これらの値は、キャッシュ動作にアタッチされたキャッシュポリシー (推奨) の中、またはレガシーキャッシュ設定の中で設定できます。

  • オリジンからの応答に Cache-Control または Expires ヘッダーを含めます。これらのヘッダーは、別のリクエストを に送信する前に、ブラウザがオブジェクトをブラウザキャッシュに保持する期間を決定するのにも役立ちます CloudFront。

次の表では、オリジンから送信された Cache-Control ヘッダーと Expires ヘッダーがキャッシュ動作の TTL 設定とどのように関係し、キャッシュに影響を与えるのかを説明しています。

オリジンヘッダー 最小 TTL = 0 最小 TTL > 0

オリジンが Cache-Control: max-age ディレクティブをオブジェクトに追加

CloudFront キャッシュ

CloudFront は、 Cache-Control: max-age ディレクティブの値または CloudFront 最大 TTL の値のうち、小さい方の値に対応する期間、オブジェクトをキャッシュに保持します。

ブラウザキャッシュ

ブラウザは、Cache-Control: max-age ディレクティブの値に対応する期間、オブジェクトをキャッシュに保持します。

CloudFront キャッシュ

CloudFront キャッシュは、 CloudFront 最小 TTL、最大 TTL、および Cache-Control max-ageディレクティブの値によって異なります。

  • 最小 TTL < max-age < 最大 TTL の場合、 は Cache-Control: max-ageディレクティブの値に対応する期間、オブジェクトを CloudFront キャッシュします。

  • max-age < 最小 TTL の場合 CloudFront、 は CloudFront 最小 TTL の値に対応する期間、オブジェクトをキャッシュします。

  • max-age > 最大 TTL の場合 CloudFront、 は CloudFront 最大 TTL の値に対してオブジェクトをキャッシュします。

ブラウザキャッシュ

ブラウザは、Cache-Control: max-age ディレクティブの値に対応する期間、オブジェクトをキャッシュに保持します。

オリジンが Cache-Control: max-age ディレクティブをオブジェクトに追加しない

CloudFront キャッシュ

CloudFront は、 CloudFront デフォルト TTL の値に対してオブジェクトをキャッシュします。

ブラウザキャッシュ

ブラウザによって異なります。

CloudFront キャッシュ

CloudFront は、 CloudFront 最小 TTL またはデフォルト TTL の値のうち大きい方の値に対応する期間、オブジェクトをキャッシュに保持します。

ブラウザキャッシュ

ブラウザによって異なります。

オリジンが Cache-Control: max-age および Cache-Control: s-maxage ディレクティブをオブジェクトに追加

CloudFront キャッシュ

CloudFront は、 Cache-Control: s-maxage ディレクティブの値または CloudFront 最大 TTL の値のうち、小さい方の値に対応する期間、オブジェクトをキャッシュに保持します。

ブラウザキャッシュ

ブラウザは、Cache-Control max-age ディレクティブの値に対応する期間、オブジェクトをキャッシュに保持します。

CloudFront キャッシュ

CloudFront キャッシュは、 CloudFront 最小 TTL、最大 TTL、および Cache-Control: s-maxageディレクティブの値によって異なります。

  • 最小 TTL < s-maxage < 最大 TTL の場合、 は Cache-Control: s-maxageディレクティブの値に対してオブジェクトを CloudFront キャッシュします。

  • s-maxage < 最小 TTL の場合 CloudFront、 は CloudFront 最小 TTL の値に対応する期間、オブジェクトをキャッシュします。

  • s-maxage > 最大 TTL の場合 CloudFront、 は CloudFront 最大 TTL の値に対してオブジェクトをキャッシュします。

ブラウザキャッシュ

ブラウザは、Cache-Control: max-age ディレクティブの値に対応する期間、オブジェクトをキャッシュに保持します。

オリジンが Expires ヘッダーをオブジェクトに追加

CloudFront キャッシュ

CloudFront は、Expiresヘッダーまたは CloudFront 最大 TTL の値のいずれか早い方の日付までオブジェクトをキャッシュに保持します。

ブラウザキャッシュ

ブラウザは、Expires ヘッダーにある日付まで、オブジェクトをキャッシュに保持します。

CloudFront キャッシュ

CloudFront キャッシュは、 CloudFront 最小 TTL、最大 TTL、ヘッダーの値によって異なりますExpires

  • 最小 TTL < Expires < 最大 TTL の場合、 は Expiresヘッダーの日付と時刻までオブジェクトを CloudFront キャッシュします。

  • Expires < 最小 TTL の場合 CloudFront、 は CloudFront 最小 TTL の値に対応する期間、オブジェクトをキャッシュします。

  • Expires > 最大 TTL の場合 CloudFront、 は CloudFront 最大 TTL の値に対してオブジェクトをキャッシュします。

ブラウザキャッシュ

ブラウザは、Expires ヘッダーの日付けおよび時刻まで、オブジェクトをキャッシュに保持します。

オリジンが Cache-Control: no-cacheno-store、および (または) private ディレクティブをオブジェクトに追加

CloudFront および ブラウザはヘッダーを優先します。

CloudFront キャッシュ

CloudFront は、 CloudFront 最小 TTL の値に対応する期間、オブジェクトをキャッシュに保持します。この表の下にある注意点をお読みください。

ブラウザキャッシュ

ブラウザはヘッダーを優先します。

警告

Cache-Control: no-cache、、no-storeおよび/または privateディレクティブを含むオブジェクトをオリジンから CloudFront 取得し、後で同じオブジェクトに対する別のビューワーリクエスト CloudFront を取得した場合、 CloudFront はビューワーリクエストを満たすためにオリジンに接続しようとします。

オリジンに到達可能な場合、 はオリジンからオブジェクト CloudFront を取得し、ビューワーに返します。

オリジンに到達できず、最小または最大の TTL 値が 0 より大きい場合、 CloudFront は以前にオリジンから取得したオブジェクトを提供します。

この動作を回避するには、Cache-Control: stale-if-error=0 ディレクティブに、オリジンから返されたオブジェクトを含めます。これにより CloudFront 、オリジンから以前に取得したオブジェクトを返すのではなく、オリジンに到達できない場合に、 は今後のリクエストに応じてエラーを返します。

CloudFront コンソールを使用してディストリビューションの設定を変更する方法については、「」を参照してくださいディストリビューションの更新。 CloudFront API を使用してディストリビューションの設定を変更する方法については、「」を参照してくださいUpdateDistribution

Amazon S3 コンソールを使用したオブジェクトへのヘッダーの追加

Amazon S3 コンソールを使用して Amazon S3 オブジェクトに Cache-Control または Expires ヘッダーフィールドを追加するには
  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. バケットの一覧で、ヘッダーを追加するファイルを含むバケットの名前を選択します。

  3. ヘッダーを追加するファイルまたはフォルダの名前の横にあるチェックボックスをオンにします。フォルダにヘッダーを追加すると、そのフォルダ内のすべてのファイルに影響します。

  4. [Actions] (アクション) を選択し、[Edit metadata] (メタデータの編集) を選択します。

  5. [Add metadata] (メタデータを追加) パネルで 、次の操作を行います。

    1. [Add metadata] (メタデータの追加) を選択します。

    2. [Type] (タイプ) で、[System defined] (システム定義) を選択します。

    3. [Key] (キー) で、追加するヘッダーの名前 ([Cache-Control] または [Expires]) を選択します。

    4. [Value] (値) で、ヘッダー値を入力します。例えば、Cache-Control ヘッダーの場合は、max-age=86400 と入力します。Expires で、有効期限の日時を Wed, 30 Jun 2021 09:28:00 GMT のように入力できます。

  6. ページの最下部で [Edit metadata] (メタデータの編集) を選択します。