メニュー
Amazon CloudFront
開発者ガイド (API Version 2016-09-29)

CloudFront エッジキャッシュにオブジェクトを保持する時間の指定 (有効期限切れ)

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

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

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

  • CloudFront キャッシュに最新バージョンがない場合、オリジンはステータスコード 200 (OK) とオブジェクトの最新バージョンを返します。

エッジロケーションに頻繁に要求されないオブジェクトがあれば、CloudFront は、頻繁に要求されるようになったオブジェクト用にスペースを確保するために、そのオブジェクトを削除する (そのオブジェクトの有効期限が切れる前に削除する) 場合があります。

デフォルトでは、各オブジェクトは 24 時間後に自動的に有効期限切れになります。ウェブディストリビューションでは、以下の 2 つの方法でデフォルトの動作を変更できます。

  • 同じパスパターンに一致するすべてのオブジェクトのキャッシュ保持期間を変更するには、CloudFront の設定でキャッシュの動作の [Minimum TTL]、[Maximum TTL]、[Default TTL] を変更できます。個々の設定については、「最小 TTL」、「最大 TTL」、「デフォルト TTL」を参照してください。これらの設定を使用するには、[Object Caching] 設定で [Customize] オプションを選択する必要があります。

  • 個々のオブジェクトのキャッシュ保持期間を変更するには、オブジェクトに Cache-Control max-age または Cache-Control s-maxage ディレクティブを追加するか、Expires ヘッダーフィールドを追加するように、オリジンを設定します。詳細については、「ヘッダーを使用した個々のオブジェクトのキャッシュ保持期間の制御」を参照してください。

[Minimum TTL]、[Default TTL]、[Maximum TTL] が Cache-Control max-age ディレクティブ、Cache-Control s-maxage ディレクティブ、Expires ヘッダーフィールドとどのように連動するかの詳細については、「ウェブディストリビューションで CloudFront がキャッシュにオブジェクトを保持する期間の指定」を参照してください。

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

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

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

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

    Cache-Control: max-age=

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

    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

オブジェクトのキャッシュを制御するには、Expires ヘッダーフィールドではなく、Cache-Control max-age ディレクティブを使用することをお勧めします。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」の以下のセクションを参照してください。

AWS SDK for PHP を使用して Cache-Control および Expires ヘッダーフィールドを追加する方法の例については、「Amazon Simple Storage Service 開発者ガイド」の「AWS SDK for PHP を使用した 1 つのオブジェクトのアップロード」を参照してください。これらのフィールドを追加できるサードパーティツールもあります。

ウェブディストリビューションで CloudFront がキャッシュにオブジェクトを保持する期間の指定

ウェブディストリビューションで、Cache-Control または Expires ヘッダーと共に、CloudFront の最小、最大、デフォルトの TTL 値を使用することで、CloudFront が別のリクエストをオリジンに転送するまでにキャッシュにオブジェクトを保持する期間 (秒) を制御できます。ヘッダーの値によって、ブラウザが別のリクエストを CloudFront に転送するまでにオブジェクトをキャッシュに保持する期間も決まります。

重要

キャッシュ動作のためにすべてのヘッダーをオリジンに転送するように CloudFront を設定した場合、CloudFront は関連付けられたオブジェクトをキャッシュしません。その代わり、CloudFront はそのオブジェクトに関するすべてのリクエストをオリジンに転送します。その設定では、最小 TTL の値を 0 にする必要があります。詳細については、「リクエストヘッダーに基づいてオブジェクトをキャッシュするように CloudFront を設定する」を参照してください。

[Minimum TTL]、[Maximum TTL]、[Default TTL] の値を指定するには、[Object Caching] 設定で [Customize] オプションを選択する必要があります。

オリジン設定 最小 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

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

  • 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

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

  • 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

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

  • Expires < 最小 TTL

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

  • Expires > 最大 TTL

    CloudFront は、CloudFront 最大 TTL の値に対応する期間、オブジェクトをキャッシュに保持します。

ブラウザキャッシュ

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

オリジンが、Cache-Control: no-cacheno-store、および private ディレクティブ、またはこのいずれかをオブジェクトに追加する

CloudFront とブラウザはヘッダーを尊重します。

CloudFront による Cache-Control: no-cache ヘッダーの処理方法の例外については、「同じオブジェクト (トラフィックスパイク) の同時リクエスト」を参照してください。

CloudFront キャッシュ

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

ブラウザキャッシュ

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

CloudFront コンソールを使用してウェブディストリビューションの設定を変更する方法については、「CloudFront ディストリビューションの一覧表示、詳細表示、および更新を行う」を参照してください。CloudFront API を使用してウェブディストリビューションの設定を変更する方法については、「PUT Config」を参照してください。

RTMP ディストリビューションで CloudFront がキャッシュにオブジェクトを保持する最小時間の指定

RTMP ディストリビューションでは、CloudFront はオブジェクトをエッジキャッシュにデフォルトで 24 時間保持します。Cache-Control または Expires ヘッダーをオブジェクトに追加して、別のリクエストをオリジンに転送するまでに CloudFront がエッジキャッシュにオブジェクトを保持する時間を変更できます。最小時間は 3600 秒 (1 時間) です。それより低い値を指定しても、CloudFront は 3600 秒を使用します。

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

注記

Amazon S3 コンソールを使用した場合、1 回で 1 つのオブジェクトにのみヘッダーを追加できますが、一部のサードパーティツールを使用した場合、1 回で複数の Amazon S3 オブジェクトにヘッダーを追加できます。Amazon S3 をサポートするサードパーティツールの詳細については、ウェブで AWS S3 サードパーティツールを検索してください。

Amazon S3 コンソールを使用して、Cache-Control または Expires ヘッダーフィールドを Amazon S3 オブジェクトに追加するには

  1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3) を開きます。

  2. Amazon S3 コンソールのバケットペインで、ファイルを含むバケットの名前をクリックします。

  3. オブジェクトのリストで、ヘッダーフィールドの追加先とする最初のオブジェクトを選択します。

  4. [Actions]、[Properties] の順にクリックします。

  5. 右側のペインで、[Metadata] を展開します。

  6. [Add More Metadata] をクリックします。

  7. [Key] リストで、必要に応じて [Cache-Control] または [Expires] をクリックします。

  8. [Value] フィールドに適用可能な値を入力します。

    • [Cache-Control] フィールドでは、次のように入力します。

      max-age=number of seconds that you want objects to stay in a CloudFront edge cache

    • [Expires] フィールドでは、日時を HTML 形式で入力します。

  9. [Save] をクリックします。

  10. ヘッダーフィールドを他のオブジェクトに追加する場合は、次のオブジェクトの名前をクリックし、ステップ 5 ~ 9 を繰り返します。