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
リクエストへの応答を常にキャッシュします。OPTIONS
リクエストへの応答をキャッシュするように CloudFront を設定することもできます。CloudFront はその他のメソッドを使用するリクエストへのレスポンスをキャッシュしません。
オリジンが応答しない場合、オリジンへの CloudFront リクエストはタイムアウトし、オリジンからの HTTP 5xx エラーと見なされます。これは、オリジンからそのエラーが返されなくても同様です。そのシナリオでは、CloudFront はキャッシュされたコンテンツを引き続き提供します。詳細については、「使用できないオリジン」を参照してください。
ログ作成を有効にしている場合、CloudFront は、HTTP ステータスコードに関係なく結果をログに書き込みます。
CloudFront から返されるエラーメッセージに関連する機能とオプションの詳細については、以下を参照してください。
CloudFront コンソールでのカスタムエラーページの設定の詳細については、「カスタムエラーページとエラーキャッシュ」を参照してください。
CloudFront コンソールでのエラーキャッシュ最小 TTL の詳細については、「Error caching minimum TTL (seconds) (エラーキャッシュ最小 TTL (秒))」を参照してください。
CloudFront がキャッシュする HTTP ステータスコードのリストについては、「CloudFront がキャッシュする HTTP 4xx および 5xx ステータスコード」を参照してください。
カスタムエラーページが設定されている場合に CloudFront がエラーを処理する方法
カスタムエラーページを設定している場合、CloudFront の動作は、リクエストされたオブジェクトがエッジキャッシュにあるかどうかによって異なります。
リクエストされたオブジェクトがエッジキャッシュにない場合
CloudFront は、以下のすべてが該当する場合に、オリジンからリクエストされたオブジェクトの取得を試行し続けます。
ビューワーがオブジェクトを要求する
オブジェクトがエッジキャッシュにない
オリジンが HTTP 4xx または 5xx ステータスコードを返して、以下のいずれかに該当する:
オリジンがステータスコード 304 (変更なし) またはオブジェクトの更新バージョンを返す代わりに HTTP 5xx ステータスコードを返す
オリジンが、キャッシュコントロールヘッダーによって制限されておらず、以下のステータスコードのリストに含まれている HTTP 4xx ステータスコードを返す: CloudFront が常にキャッシュする HTTP 4xx および 5xx ステータスコード。
オリジンが
Cache-Control max-age
ヘッダーまたはCache-Control s-maxage
ヘッダーなしで HTTP 4xx ステータスコードを返す。ステータスコードは、次のステータスコードの一覧に含まれる: コントロール CloudFront が Cache-Control ヘッダーに基づいてキャッシュする HTTP 4xx ステータスコード。
CloudFront は以下の処理を行います。
-
ビューワーからリクエストを受け取った CloudFront エッジキャッシュで、CloudFront はディストリビューション設定を確認し、オリジンから返されたステータスコードに対応するカスタムエラーページのパスを取得します。
-
CloudFront は、カスタムエラーページのパスと一致するパスパターンを持つ、ディストリビューション内の最初のキャッシュ動作を検索します。
-
CloudFront エッジロケーションは、キャッシュ動作に指定されているオリジンに、カスタムエラーページのリクエストを送信します。
-
オリジンはカスタムエラーページをエッジロケーションに返します。
-
CloudFront は、リクエストを送信したビューワーにカスタムエラーページを返します。また、最大で次の値になるようにカスタムエラーページをキャッシュします。
エラーキャッシュ最小 TTL で指定された時間の長さ (デフォルトでは 10 秒)
Cache-Control max-age
ヘッダー、または最初のリクエストがエラーを生成したときに発信元から返されたCache-Control s-maxage
ヘッダーで指定された時間
-
キャッシュ時間 (ステップ 5 で決定されます) が経過すると、CloudFront はオリジンに別のリクエストを転送して、リクエストされたオブジェクトの取得を再試行します。CloudFront は、エラーキャッシュ最小 TTL に指定された間隔で再試行し続けます。
リクエストされたオブジェクトがエッジキャッシュにある場合
CloudFront は、以下のすべてに該当する場合に、現在エッジキャッシュに存在するオブジェクトを引き続き提供します。
ビューワーがオブジェクトを要求する
オブジェクトがエッジキャッシュに存在するが有効期限が切れている
オリジンがステータスコード 304 (変更なし) またはオブジェクトの更新バージョンを返す代わりに HTTP 5xx ステータスコードを返す
CloudFront は以下の処理を行います。
-
オリジンが 5xx ステータスコードを返した場合、CloudFront はオブジェクトの有効期限が切れていても、そのオブジェクトを返します。エラーキャッシュ最小 TTL の期間、CloudFront は、エッジキャッシュからオブジェクトを提供することで、ビューワーリクエストに対して応答し続けます。
オリジンが 4xx ステータスコードを返した場合、CloudFront はリクエストされたオブジェクトではなく、ステータスコードをビューワーに返します。
-
エラーキャッシュ最小 TTL が経過すると、CloudFront はオリジンに別のリクエストを転送して、リクエストされたオブジェクトの取得を再試行します。オブジェクトが頻繁にリクエストされない場合、CloudFront はそのオブジェクトをエッジキャッシュから削除することがありますが、オリジンサーバーは引き続き 5xx レスポンスを返します。オブジェクトが CloudFront エッジキャッシュに保持される期間については、「コンテンツがキャッシュに保持される期間 (有効期限) の管理」を参照してください。
カスタムエラーページが設定されていない場合に CloudFront がエラーを処理する方法
カスタムエラーページを設定していない場合、CloudFront の動作は、リクエストされたオブジェクトがエッジキャッシュにあるかどうかによって異なります。
リクエストされたオブジェクトがエッジキャッシュにない場合
CloudFront は、以下のすべてが該当する場合に、オリジンからリクエストされたオブジェクトの取得を試行し続けます。
ビューワーがオブジェクトを要求する
オブジェクトがエッジキャッシュにない
オリジンが HTTP 4xx または 5xx ステータスコードを返して、以下のいずれかに該当する:
オリジンがステータスコード 304 (変更なし) またはオブジェクトの更新バージョンを返す代わりに HTTP 5xx ステータスコードを返す
オリジンがキャッシュコントロールヘッダーによって制限されておらず、以下のステータスコードのリストに含まれている HTTP 4xx ステータスコードを返す: CloudFront が常にキャッシュする HTTP 4xx および 5xx ステータスコード。
オリジンが
Cache-Control max-age
ヘッダーまたはCache-Control s-maxage
ヘッダーなしで HTTP 4xx ステータスコードを返す。ステータスコードは、次のステータスコードの一覧に含まれる: コントロール CloudFront が Cache-Control ヘッダーに基づいてキャッシュする HTTP 4xx ステータスコード。
CloudFront は以下の処理を行います。
-
CloudFront は 4xx または 5xx のステータスコードをビューワーに返します。また、次の最大値のリクエストを受け取ったエッジキャッシュにステータスコードをキャッシュします。
エラーキャッシュ最小 TTL で指定された時間の長さ (デフォルトでは 10 秒)
Cache-Control max-age
ヘッダー、または最初のリクエストがエラーを生成したときに発信元から返されたCache-Control s-maxage
ヘッダーで指定された時間
キャッシュ時間の期間 (ステップ 1 で決定されます) では、CloudFront はキャッシュされた 4xx または 5xx のステータスコードを使用して、同じオブジェクトに対する後続のビューワーリクエストに応答します。
-
キャッシュ時間 (ステップ 1 で決定されます) が経過すると、CloudFront はオリジンに別のリクエストを転送して、リクエストされたオブジェクトの取得を再試行します。CloudFront は、エラーキャッシュ最小 TTL に指定された間隔で再試行し続けます。
リクエストされたオブジェクトがエッジキャッシュにある場合
CloudFront は、以下のすべてに該当する場合に、現在エッジキャッシュに存在するオブジェクトを引き続き提供します。
ビューワーがオブジェクトを要求する
オブジェクトがエッジキャッシュに存在するが有効期限が切れている
オリジンがステータスコード 304 (変更なし) またはオブジェクトの更新バージョンを返す代わりに HTTP 5xx ステータスコードを返す
CloudFront は以下の処理を行います。
オリジンが 5xx のエラーコードを返した場合、CloudFront は、オブジェクトの有効期限が切れていても、そのオブジェクトを返します。エラーキャッシュ最小 TTL 時間 (デフォルトでは 10 秒) の間、CloudFront は、エッジキャッシュからオブジェクトを提供することで、ビューワーからのリクエストに応答し続けます。
オリジンが 4xx ステータスコードを返した場合、CloudFront はリクエストされたオブジェクトではなく、ステータスコードをビューワーに返します。
エラーキャッシュ最小 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 |
414 |
Request-URI Too Large |
500 |
Internal Server Error |
501 |
Not Implemented |
502 |
Bad Gateway |
503 |
Service Unavailable |
504 |
Gateway Time-out |
CloudFront が Cache-Control
ヘッダーに基づいてキャッシュする HTTP 4xx ステータスコード
オリジンが Cache-Control max-age
または Cache-Control s-maxage
ヘッダーを返す場合、CloudFront は以下の HTTP 4 xx ステータスコードのみをキャッシュします。これらの HTTP ステータスコードの 1 つに対してカスタムエラーページを設定していて、オリジンから 1 つのキャッシュコントロールヘッダーが返された場合、CloudFront はカスタムエラーページをキャッシュします。
400 |
Bad Request |
403 |
Forbidden |
405 |
Method Not Allowed |
412 |
Precondition Failed |
415 |
Unsupported Media Type |