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

CloudFront がオブジェクトの部分的リクエスト(レンジ GET)を処理する方法

大きなオブジェクトの場合、エンドユーザーのブラウザまたはクライアントは、複数の GET リクエストを実行し、Range リクエストヘッダーを使用して、小さい単位でオブジェクトをダウンロードする場合があります。Range GET リクエストとも呼ばれるこのバイト範囲のリクエストでは、部分的なダウンロードの効率、および部分的に失敗した転送からの回復の効率が向上します。

CloudFront は Range GET リクエストを受け取ると、そのリクエストを受け取ったエッジロケーションのキャッシュをチェックします。そのエッジロケーションのキャッシュにオブジェクト全体またはオブジェクトの要求された部分がすでに含まれる場合、CloudFront は要求された範囲をキャッシュから直ちに供給します。

要求された範囲がキャッシュに含まれない場合、CloudFront はリクエストをオリジンに転送します。(パフォーマンスを最適化するために、CloudFront は、Range GET でクライアントから要求された範囲よりも大きい範囲を要求する場合があります)。次に実行される処理は、オリジンが Range GET リクエストをサポートするかどうかによって異なります。

  • オリジンが Range GET リクエストをサポートする場合: 要求された範囲が返されます。CloudFront は、要求された範囲を供給します。また、その範囲をキャッシュして、今後のリクエストに備えます。(Amazon S3 は、Apache、IIS など、一部の HTTP サーバーと同様に、Range GET リクエストをサポートします。使用している HTTP サーバーがこれをサポートしているかどうかについては、使用している HTTP サーバーに関するドキュメントを参照してください)。

  • オリジンが Range GET リクエストをサポートしない場合: オブジェクト全体が返されます。CloudFront は、オブジェクト全体を供給します。また、そのオブジェクト全体をキャッシュして、今後のリクエストに備えます。CloudFront はオブジェクト全体をエッジキャッシュにキャッシュした後、要求された範囲を供給することで Range GET リクエストに応答します。

どちらの場合も、CloudFront は、オリジンから 1 バイト目が到着した直後に、要求された範囲またはオブジェクトをエンドユーザーに供給します。

Note

ビューワーが Range GET をリクエストし、オリジンは Transfer-Encoding: chunked を返し、CloudFront はリクエストされた範囲ではなくオブジェクト全体をビューワーに返します。

通常、CloudFront は、Range ヘッダーの RFC 仕様に準拠します。ただし、Range ヘッダーが以下の要件に準拠しない場合、CloudFront は、指定された範囲とステータスコード 206 を返す代わりに、完全なオブジェクトと HTTP ステータスコード 200 を返します。

  • 範囲は昇順に指定されている必要があります。たとえば、100-200,300-400 は有効で、300-400,100-200 は無効です。

  • 範囲は重複できません。たとえば、100-200,150-250 は無効です。

  • すべての範囲指定が有効である必要があります。たとえば、範囲の一部に負の値を指定することはできません。

Range リクエストヘッダーの詳細については、「ハイパーテキスト転送プロトコル –– HTTP//1.1」(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35)の「セクション 14.35 範囲」を参照してください。