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

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

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

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

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

  • ステータスコード。

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

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

CloudFront コンソールでのカスタムエラーページの設定の詳細については、「Custom Error Pages (カスタムエラーページ) と Error Caching (エラーキャッシュ) 」を参照してください。CloudFront コンソールでのエラーキャッシュ最小 TTL の詳細については、「Error Caching Minimum TTL (エラーキャッシュ最小 TTL) 」を参照してください。

CloudFront がキャッシュする HTTP ステータスコードのリストについては、「CloudFront がキャッシュする HTTP 4xx および 5xx ステータスコード」を参照してください。

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

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

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

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

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

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

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

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

CloudFront は以下を実行します。

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

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

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

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

  5. CloudFront は、リクエストを送信したビューワーにカスタムエラーページを返し、エラーキャッシュ最小 TTL (デフォルトで 5 分)に指定された時間カスタムエラーページのキャッシュも行います。

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

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

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

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

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

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

CloudFront は以下を実行します。

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

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

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

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

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

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

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

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

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

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

CloudFront は以下を実行します。

  1. CloudFront は 4xx または 5xx ステータスコードをビューワーに返します。

  2. また、CloudFront は、リクエストを受け取ったエッジキャッシュにステータスコードをキャッシュします。

  3. エラーキャッシュ最小 TTL (デフォルトで 5 分) の期間、CloudFront はそれ以後に同じオブジェクトを要求するビューワーリクエストに、キャッシュされた 4xx または 5xx ステータスコードでレスポンスします。

  4. エラーキャッシュ最小 TTL が経過すると、CloudFront はオリジンに別のリクエストを転送して、リクエストされたオブジェクトを再度取得することを試みます。

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

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

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

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

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

CloudFront は以下を実行します。

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

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

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

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

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

400

Bad Request

403

Forbidden

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