HTTPQUERY
日本語

Content-Range

使い方

Content-Range ヘッダーは、サーバーが範囲リクエストに応えてリソースの一部のみを配信する 206 Partial Content レスポンスに現れます。このヘッダーは、部分コンテンツのバイト範囲とリソース全体のサイズを示します。

範囲リクエストは効率的なダウンロードを可能にします。大きなファイルの転送中に中断されたクライアントは、最初からやり直すのではなく接続が切れた地点から再開できます。メディアプレーヤーは範囲リクエストを使い、ストリーム全体をダウンロードすることなく音声や動画ファイルの特定位置へシークします。

サーバーは範囲リクエストへの対応を Accept-Ranges ヘッダーで通知し、通常はその値を bytes に設定します。範囲リクエストがリソースの境界を超えるバイト範囲を要求した場合、サーバーは 416 Range Not Satisfiable で応答し、実際のリソースサイズを示す Content-Range ヘッダーを含めます。

構文は 3 つの要素からなる構造化された形式に従います。単位(ほぼ常に bytes)、バイト範囲、そして全体のサイズです。

Content-Range: <unit> <range-start>-<range-end>/<size>

unit

範囲の単位の種類です。広く実装されている単位は bytes のみです。

range-start

返される範囲の最初のバイトを示す 0 起点の整数です。

range-end

返される範囲の最後のバイトを示す 0 起点の整数で、この値自体も範囲に含まれます。

size

リソース全体のサイズをバイト単位で表したものです。ストリーミングや動的に生成されるコンテンツのように全体の長さが不明な場合は、サイズの代わりにアスタリスク(*)を置きます。

例

クライアントが、総サイズ 65,000 バイトのファイルの 1000 バイト目からダウンロードを再開します。サーバーは 1000 バイト目から 2000 バイト目まで(両端を含む)を返します。

Content-Range: bytes 1000-2000/65000

ストリーミングのリソースが、総サイズが分からないまま範囲を配信します。アスタリスクは全体の長さが不明であることを示します。

Content-Range: bytes 1000-2000/*

要求されたバイトがリソースのサイズを超えているため、サーバーが範囲リクエストを拒否します。レスポンスは 416 Range Not Satisfiable ステータスを持ち、実際のサイズを報告します。

HTTP/1.1 416 Range Not Satisfiable
Content-Range: bytes */50000

マルチパートの範囲レスポンスは、1 つのレスポンスで複数の範囲を配信します。各パートは multipart/byteranges のボディ内に独自の Content-Range ヘッダーを持ちます。

HTTP/1.1 206 Partial Content
Content-Type: multipart/byteranges; boundary=BOUNDARY

--BOUNDARY
Content-Type: text/plain
Content-Range: bytes 0-499/10000

[first 500 bytes]
--BOUNDARY
Content-Type: text/plain
Content-Range: bytes 9500-9999/10000

[last 500 bytes]
--BOUNDARY--

注意

Content-Length はメッセージボディ全体のサイズをバイト単位で示します。Content-Range は、現在のレスポンスがリソース全体のどのバイト区間を含んでいるかを示します。完全なレスポンスは Content-Length のみを使い、206 Partial Content のレスポンスは両方のヘッダーを併用します。