Amazon CloudFront
開発者ガイド (API バージョン 2016-09-29)

CloudFront がオリジンからの HTTP 4xx および 5xx ステータスコードを処理してキャッシュに保持する方法

CloudFront が Amazon S3 バケットまたはカスタムオリジンサーバーのオブジェクトをリクエストすると、オリジンサーバーは HTTP 4xx または 5xx ステータスコードを返すことがあります。このステータスコードは、エラーが発生したことを示します。CloudFront の動作は、以下の条件によって左右されます。

  • カスタムエラーページが構成されているかどうか。

  • オリジンからのエラーレスポンスを CloudFront がキャッシュする時間 (エラーキャッシュ最小 TTL) が構成されているかどうか。

  • ステータスコード。

  • 5xx ステータスコードの場合、リクエストされたオブジェクトが現在 CloudFront エッジキャッシュにあるかどうか。

  • いくつかの 4xx ステータスコードでは、オリジンが Cache-Control max-age または Cache-Control s-maxage のヘッダを返すかどうか。

CloudFront は、GET リクエストと HEAD リクエストへの応答を常にキャッシュします。CloudFront リクエストへの応答をキャッシュするように OPTIONS を設定することもできます。CloudFront はその他のメソッドを使用するリクエストへのレスポンスをキャッシュしません。

オリジンが応答しない場合、オリジンへの CloudFront リクエストはタイムアウトし、オリジンからの HTTP 5xx エラーと見なされます。これは、オリジンからそのエラーが返されなくても同様です。そのシナリオでは、CloudFront はキャッシュされたコンテンツを引き続き供給します。詳細については、「使用できないオブジェクト」を参照してください。

ログ作成を有効にしている場合、CloudFront は、HTTP ステータスコードに関係なく結果をログに書き込みます。

CloudFront から返されるエラーメッセージに関連する機能とオプションの詳細については、以下を参照してください。

カスタムエラーページが設定されている場合に CloudFront がエラーを処理する方法

カスタムエラーページを設定している場合、CloudFront の動作は、リクエストされたオブジェクトがエッジキャッシュにあるかどうかによって異なります。

リクエストされたオブジェクトがエッジキャッシュにない場合

CloudFront は、以下のすべてが true の場合に、オリジンからリクエストされたオブジェクトを取得しようとします。

  • ビューワーがオブジェクトを要求する

  • オブジェクトがエッジキャッシュにない

  • オリジンが HTTP 4 xx または 5 xx ステータスコードを返して、以下のいずれかに該当する:

CloudFront は以下を実行します。

  1. ビューワーからリクエストを受け取った CloudFront エッジキャッシュで、CloudFront はディストリビューション設定を確認し、オリジンから返されたステータスコードに対応するカスタムエラーページのパスを取得します。

  2. CloudFront は、カスタムエラーページのパスと一致するパスパターンを持つ、ディストリビューション内の最初のキャッシュ動作を検索します。

  3. CloudFront エッジロケーションは、キャッシュ動作に指定されているオリジンに、カスタムエラーページのリクエストを送信します。

  4. オリジンはカスタムエラーページをエッジロケーションに返します。

  5. CloudFront は、リクエストを送信したビューアにカスタムエラーページを返します。また、最大で次の値になるようにカスタムエラーページをキャッシュします。

    • エラーキャッシュの最小 TTL で指定された時間 (デフォルトでは 5 分)

    • Cache-Control max-age ヘッダー、または最初のリクエストがエラーを生成したときに発信元から返された Cache-Control s-maxage ヘッダーで指定された時間

  6. キャッシュ時間 (ステップ 5 で決定されます) が経過すると、CloudFront はオリジンに別のリクエストを転送して、リクエストされたオブジェクトを再度取得することを試みます。CloudFront は、エラーキャッシュ最小 TTL に指定された間隔で再試行し続けます。

リクエストされたオブジェクトがエッジキャッシュにある場合

CloudFront は、以下のすべてが true の場合に、エッジキャッシュに現在存在するオブジェクトを引き続き供給します。

  • ビューワーがオブジェクトを要求する

  • オブジェクトがエッジキャッシュ存在するが有効期限が切れている

  • オリジンがステータスコード 304 (変更なし) またはオブジェクトの更新バージョンを返す代わりに HTTP 5xx ステータスコードを返す

CloudFront は以下を実行します。

  1. オリジンが 5xx ステータスコードを返した場合、CloudFront はオブジェクトの有効期限が切れていても、そのオブジェクトを返します。エラーキャッシュ最小 TTL の期間、CloudFront はビューワーリクエストに対してエッジキャッシュのオブジェクトを返してレスポンスを続けます。

    オリジンが 4xx ステータスコードを返した場合、CloudFront はビューワーに、リクエストされたオブジェクトではなく、ステータスコードを返します。

  2. エラーキャッシュ最小 TTL が経過すると、CloudFront はオリジンに別のリクエストを転送して、リクエストされたオブジェクトを再度取得することを試みます。オブジェクトが頻繁にリクエストされない場合、CloudFront はそのオブジェクトをエッジキャッシュから削除することがありますが、オリジンサーバーは引き続き 5xx レスポンスを返します。オブジェクトが CloudFront エッジキャッシュに保持される期間については、「コンテンツがエッジキャッシュに保持される期間の管理 (有効期限)」を参照してください。

カスタムエラーページが構成されていない場合に CloudFront がエラーを処理する方法

カスタムエラーページを設定していない場合、CloudFront の動作は、リクエストされたオブジェクトがエッジキャッシュにあるかどうかによって異なります。

リクエストされたオブジェクトがエッジキャッシュにない場合

CloudFront は、以下のすべてが true の場合に、オリジンからリクエストされたオブジェクトを取得しようとします。

  • ビューワーがオブジェクトを要求する

  • オブジェクトがエッジキャッシュにない

  • オリジンが HTTP 4 xx または 5 xx ステータスコードを返して、以下のいずれかに該当する:

CloudFront は以下を実行します。

  1. CloudFront は 4xx または 5xx のステータスコードをビューワーに返します。また、ステータスコードを次の最大値のリクエストを受け取ったエッジキャッシュにキャッシュします。

    • エラーキャッシュの最小 TTL で指定された時間 (デフォルトでは 5 分)

    • Cache-Control max-age ヘッダー、または最初のリクエストがエラーを生成したときに発信元から返された Cache-Control s-maxage ヘッダーで指定された時間

  2. キャッシュ時間の期間(ステップ 1 で決定されます)では、 CloudFront はキャッシュされた 4xx または 5xx のステータスコードを使用して、同じオブジェクトに対する後続のビューワーリクエストに応答します。

  3. キャッシュ時間 (ステップ 1 で決定されます) が経過すると、CloudFront はオリジンに別のリクエストを転送して、リクエストされたオブジェクトを再度取得することを試みます。CloudFront は、エラーキャッシュ最小 TTL に指定された間隔で再試行し続けます。

リクエストされたオブジェクトがエッジキャッシュにある場合

CloudFront は、以下のすべてが true の場合に、エッジキャッシュに現在存在するオブジェクトを引き続き供給します。

  • ビューワーがオブジェクトを要求する

  • オブジェクトがエッジキャッシュ存在するが有効期限が切れている

  • オリジンがステータスコード 304 (変更なし) またはオブジェクトの更新バージョンを返す代わりに HTTP 5xx ステータスコードを返す

CloudFront は以下を実行します。

  1. オリジンが 5xx のエラーコードを返した場合、CloudFront は、オブジェクトの有効期限が切れていても、そのオブジェクトを返します。エラーキャッシュ最小 TTL の期間 (デフォルトでは 5 分)、CloudFront は、エッジキャッシュからオブジェクトを返すことで、ビューワーからのリクエストに応答し続けます。

    オリジンが 4xx ステータスコードを返した場合、CloudFront はビューワーに、リクエストされたオブジェクトではなく、ステータスコードを返します。

  2. エラーキャッシュ最小 TTL が経過すると、CloudFront はオリジンに別のリクエストを転送して、リクエストされたオブジェクトを再度取得することを試みます。オブジェクトが頻繁にリクエストされない場合、CloudFront はそのオブジェクトをエッジキャッシュから削除することがありますが、オリジンサーバーは引き続き 5xx レスポンスを返します。オブジェクトが CloudFront エッジキャッシュに保持される期間については、「コンテンツがエッジキャッシュに保持される期間の管理 (有効期限)」を参照してください。

CloudFront がキャッシュする HTTP 4xx および 5xx ステータスコード

CloudFront は、返された特定のステータスコードと、オリジンがレスポンスで特定のヘッダーを返すかどうかに応じて、オリジンから返された HTTP 4xx と 5xx ステータスコードをキャッシュします。

CloudFront がキャッシュする HTTP 4xx および 5xx ステータスコード

CloudFront は、オリジンから返される以下の HTTP 4xx および 5xx ステータスコードを常にキャッシュします。HTTP ステータスコードのカスタムエラーページを構成してある場合は、CloudFront はカスタムエラーページをキャッシュします。

404

Not Found

405

Method Not Allowed

414

Request-URI Too Large

500

Internal Server Error

501

Not Implemented

502

Bad Gateway

503

Service Unavailable

504

Gateway Time-out

CloudFront がキャッシュコントロールヘッダーに基づいてキャッシュする HTTP 4xx ステータスコード

オリジンが Cache-Control max-age または Cache-Control s-maxage ヘッダーを返す場合、CloudFront は以下の HTTP 4 xx ステータスコードのみをキャッシュします。これらの HTTP ステータスコードの 1 つに対してカスタムエラーページを設定していて、オリジンから 1 つのキャッシュコントロールヘッダーが返された場合、CloudFront はカスタムエラーページをキャッシュします。

400

Bad Request

403

Forbidden

412

Precondition Failed

415

Unsupported Media Type