HTTPQUERY
日本語

206 Partial Content

使い方

206 Partial Content ステータスコードは、1つ以上の Range ヘッダーを含むリクエストへの応答として返されます。Range ヘッダーはサーバーが返すドキュメントの部分を指定し、サーバーは任意でそのデータをマルチパートドキュメントとして配信します。

単一の Range ヘッダーが指定された場合、Content-Length ヘッダーは転送される範囲(コンテンツ)のサイズを反映し、Content-Type ヘッダーはドキュメントの種類と一致し、Content-Range ヘッダーがどのセクションが含まれているかを示します。ドキュメント全体のサイズは Content-Range ヘッダーの complete-length フィールドに現れます。要求されたデータはメッセージボディに続きます。

複数の範囲の場合、Content-Length ヘッダーはメッセージボディの総バイト数を示します。最初の Content-Type ヘッダーは multipart/byteranges に設定され、それに続く Content-Type と Content-Range の組が各範囲を記述します。サーバーは最初のヘッダーに Content-Range フィールドを含めません。

複数範囲のリクエストでは、サーバーは任意で、重なり合う範囲や、追加のパートを送信するオーバーヘッドより小さい間隔で隔てられた範囲を統合します。これは効率のために行われるため、要求より少ないパートを受け取っても必ずしもエラーを意味しません。その逆は成り立ちません。単一の範囲のみが要求された場合、サーバーが複数のパートを生成することはありません。

範囲の数だけでなく、パートの順序も保証されません。サーバーは要求されたのと同じ順序で範囲を送信するよう努めますが、それが常に現実的とは限りません。

要求された範囲の数にかかわらず、Content-Range ヘッダーにはリソースの総サイズが含まれます。レスポンスの時点でサイズが不明な場合は、アスタリスクがその値を表します。

サーバーが要求された範囲を返せない場合は、416 ステータスコードが返されます。一部のサーバーは代わりに、メッセージボディにドキュメント全体を含む 200 を返します。

単一範囲の取得の例

クライアントが Range ヘッダーを使って動画ファイル内のデータブロックを要求します。サーバーは MP4 でエンコードされた動画であることを示しつつ、要求された範囲を返します。

リクエスト

GET /videos/sample.mp4 HTTP/1.1
Host: example.com
Range: bytes=25000-75000

レスポンス

HTTP/1.1 206 Partial Content
Content-Type: video/mp4
Content-Length: 50001
Content-Range: bytes 25000-75000/100000

<50,001 bytes of video data>

総サイズが不明な場合の代替レスポンス

HTTP/1.1 206 Partial Content
Content-Type: video/mp4
Content-Length: 50001
Content-Range: bytes 25000-75000/*

<50,001 bytes of video data>

複数範囲の取得の例

複数の範囲が要求される場合、クライアントはリクエストで各範囲を指定します。範囲は別々の行に置かれるか、同じ行にカンマ区切りで置かれます。サーバーは範囲のパート間の境界を示すために文字列のセパレーターを使用します。

リクエスト

GET /videos/sample.mp4 HTTP/1.1
Host: example.com
Range: bytes=100-250, 1500-2000, 5000-5200

レスポンス

HTTP/1.1 206 Partial Content
Content-Length: 1115
Content-Type: multipart/byteranges; boundary=range_sep

--range_sep
Content-Type: video/mp4
Content-Range: bytes 100-250/75000

<151 bytes of video data as the first range>

--range_sep
Content-Type: video/mp4
Content-Range: bytes 1500-2000/75000

<501 bytes of video data as the second range>

--range_sep
Content-Type: video/mp4
Content-Range: bytes 5000-5200/75000

<201 bytes of video data as the third range>

--range_sep--

再開可能なダウンロード

206 Partial Content レスポンスは、再開可能なダウンロードを可能にします。転送が中断された場合、クライアントは最後に受信したバイトから始まる Range ヘッダーを伴う新しいリクエストを送信します。サーバーはリソース全体を再送信するのではなく、残りのデータを 206 レスポンスとして返します。ダウンロードマネージャーや curl —continue-at - のようなツールはこの仕組みに依存しています。

コードリファレンス

.NET

HttpStatusCode.PartialContent

Rust

http::StatusCode::PARTIAL_CONTENT

Rails

:partial_content

Go

http.StatusPartialContent

Symfony

Response::HTTP_PARTIAL_CONTENT

Python3.5+

http.HTTPStatus.PARTIAL_CONTENT

Java

java.net.HttpURLConnection.HTTP_PARTIAL

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_PARTIAL_CONTENT

Angular

@angular/common/http/HttpStatusCode.PartialContent