web-dev-qa-db-ja.com

Content-RangeヘッダーとRangeヘッダーの違いは?

HTTPヘッダーのContent-RangeとRangeの違いは何ですか?それぞれをいつ使用する必要がありますか?

特定のバイトオフセットからオーディオファイルをストリーミングしようとしています。 Content-RangeまたはRangeヘッダーを使用する必要がありますか?

ありがとう

67
lostInTransit

Range は、リクエストで使用され、特定の範囲のバイトを要求します。 Content-Range は応答で使用され、サーバーが提供しているバイト(要求した範囲とは異なる場合があります)およびコンテンツ全体の長さ(わかっている場合)を示します。

77
Brian Campbell

実際、受け入れられた答えは完全ではありません。 Content-Rangeは、応答でのみ使用されるわけではありません。また、エンティティボディを提供するリクエストでも有効です。

たとえば、HTTP PUTはエンティティ本体を提供しますが、エンティティの一部のみを提供する場合があります。したがって、PUT要求には、部分的なエンティティボディをエンティティにマージする場所をサーバーに示すContent-Rangeヘッダーを含めることができます。

たとえば、最初にHTTPを使用してファイルを作成してから追加します。

リクエスト1:

PUT /file HTTP/1.1
Host: server
Content-Length: 1

a

リクエスト2:

PUT /file HTTP/1.1
Host: server
Content-Range: bytes 1-2/*
Content-Length: 1

a

方法、ファイルの内容を見てみましょう...

リクエスト3:

GET /file HTTP/1.1
Host: server

HTTP/1.1 200 OK
Content-Length: 2

aa

これにより、HTTPを介した読み取りと書き込みの両方のランダムファイルアクセスが可能になります。開発中のWebDAVクライアントでContent-Rangeの使用を調査していたので、明確にしたかったので、おそらくこの拡張された情報は他の人に役立つでしょう。

126
btimby