情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

サーバサイドウェブ開発基礎 HTTP詳説 範囲リクエスト

メソッドがGETのHTTPリクエストでは取得するリソースのリプリゼンテーションのデータの範囲を指定することができます。すなわち、データ全体ではなくデータの一部のみの取得を要求することができます。

データの範囲を指定するにはRangeヘッダフィールドを使用します。

Rangeヘッダフィールドの値にはbytes=の後に1個以上の範囲のリストを,区切りで指定します。

範囲は2つの数値を-で結合することによって記述します。1つ目の数値がデータのバイト単位の開始インデックスを表し、2つ目の数値が終了インデックスを表します。インデックスは0から始まります。

あるいは、範囲のリストの代わりに冒頭に-を付加した数値を指定することもできます。この場合、データの末尾から数えて数値バイト分の範囲を表します。

なお、範囲指定付きのHTTPリクエストを範囲リクエストと言います。

サーバはHTTPリクエストに付加された範囲指定を処理することができる場合にはステータスコードが206Partial Content)のHTTPレスポンスを返信するようにします。

ボディに単一の範囲のデータを格納する場合にはボディには単一の範囲のデータをそのまま格納し、Content-Rangeヘッダフィールドの値にbytes、1文字の空白、ボディに格納したデータの範囲、/、データの元々の長さを順番に記述します。ただし、データの元々の長さが不明である場合には代わりに*を指定することができます。

ボディに複数の範囲のデータを格納する場合にはボディには複数の範囲のデータをmultipart/byterangesメディアタイプ(MIMEタイプ)の形式で格納し、Content-Typeヘッダフィールドの値にmultipart/byterangesメディアタイプを指定します(multipartトップレベルメディアタイプのパラメータであるboundaryパラメータも併せて指定しなければなりません)。

multipart/byterangesメディアタイプのボディ領域には複数の範囲のデータを1つずつ格納します。

multipart/byterangesメディアタイプのヘッダ領域にはContent-RangeヘッダフィールドとContent-Typeヘッダフィールドを設定します。

Content-Rangeヘッダフィールドの値にはbytes、1文字の空白、ボディ領域に格納したデータの範囲、/、データの元々の長さを順番に記述します。ただし、データの元々の長さが不明である場合には代わりに*を指定することができます。

Content-Typeヘッダフィールドの値にはデータのメディアタイプを指定します。

逆に、範囲指定を処理することができない場合にはステータスコードが416Range Not Satisfiable)でContent-Rangeヘッダフィールドの値にbytes、1文字の空白、*/、データの元々の長さを順番に記述したHTTPレスポンスを返信するようにします。

Accept-Rangesヘッダフィールド

Accept-RangesヘッダフィールドはHTTPレスポンスにおいて設定できるヘッダフィールドであり、サーバが範囲リクエストをサポートしているかをクライアントに通知するために使用することができます。

Accept-Rangesヘッダフィールドの値にはbytesnoneを指定します。範囲リクエストをサポートしている場合にはbytesを指定し、サポートしていない場合にはnoneを指定します。

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-http, web