翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
がオブジェクトの部分リクエスト CloudFront を処理する方法 (範囲 GETs)
大きなオブジェクトの場合、ビューワー (ウェブブラウザまたはその他のクライアント) は、複数のGET
リクエストを実行し、Range
リクエストヘッダーを使用して、小さいパートでオブジェクトをダウンロードできます。Range GET
リクエストとも呼ばれるこのバイト範囲のリクエストでは、部分的なダウンロードの効率、および部分的に失敗した転送からの回復の効率が向上します。
がRange GET
リクエスト CloudFront を受信すると、リクエストを受信したエッジロケーションのキャッシュをチェックします。そのエッジロケーションのキャッシュにオブジェクト全体またはオブジェクトのリクエストされた部分がすでに含まれている場合、 は要求された範囲をキャッシュから CloudFront 即座に提供します。
キャッシュにリクエストされた範囲が含まれていない場合は、オリジンへのリクエストを CloudFront 転送します。(パフォーマンスを最適化するには、 でクライアントがリクエストした範囲よりも広い範囲をリクエスト CloudFront できます)Range GET
。次に実行される処理は、オリジンが Range GET
リクエストをサポートするかどうかによって異なります。
-
オリジンが
Range GET
リクエストをサポートしている場合: リクエストされた範囲を返します。 はリクエストされた範囲 CloudFront に対応し、今後のリクエストに備えてキャッシュします。(Amazon S3 も多くの HTTP サーバーもRange GET
リクエストをサポートしています)。 -
オリジンが
Range GET
リクエストをサポートしていない場合: オブジェクト全体を返します。 オブジェクト全体を送信し、今後のリクエストに備えてキャッシュしながら、現在のリクエスト CloudFront を処理します。は、オブジェクト全体をエッジキャッシュに CloudFront キャッシュした後、リクエストされた範囲を提供することで新しいRange GET
リクエストに応答します。
いずれの場合も、オリジンから最初のバイトが到着するとすぐに、リクエストされた範囲またはオブジェクトをエンドユーザーに提供する CloudFront ようになります。
注記
ビューワーが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
リクエストヘッダーの詳細については、RFC 7233 の「範囲リクエスト
範囲リクエストを使用して大きなオブジェクトをキャッシュする
キャッシュが有効になっている場合、50 CloudFront GB を超えるオブジェクトを取得またはキャッシュしません。オリジンがこのサイズより大きいことを (Content-Length
レスポンスヘッダーで) 示すと、 はオリジンへの接続を CloudFront 閉じ、ビューワーにエラーを返します。(キャッシュを無効にすると、このサイズより大きいオブジェクトをオリジンから取得し、ビューワーに渡す CloudFront ことができます。 ただし、オブジェクトはキャッシュ CloudFront されません)。
ただし、範囲リクエストでは、 CloudFront を使用して、キャッシュ可能な最大ファイルサイズ より大きいオブジェクトをキャッシュできます。たとえば、100 GB のオブジェクトを持つオリジンについて考えてみましょう。キャッシュを有効にすると、このサイズのオブジェクトを取得したりキャッシュ CloudFront したりしません。ただし、ビューワーは複数の範囲リクエストを送信することにより、それぞれサイズが 50 GB 未満のパートを使用して、このパートのオブジェクトを取得できます。例えば、ビューワーは、ヘッダー付きのリクエストを送信することで 20 GB のパートのオブジェクトがリクエストでき、Range: bytes=0-21474836480
最初のパート (他のヘッダー付きのリクエスト) を取得して、Range: bytes=21474836481-42949672960
その次のパートを取得、などといったようになります。ビューワーがすべてのパートを受信すると、それらを組み合わせて元の 100 GB のオブジェクトを構築できます。この場合、 はオブジェクトの 20 GB の各部分を CloudFront キャッシュし、キャッシュから同じ部分に対する後続のリクエストに応答できます。