2013-08-19 18 views
9

HTTP/1.1サーバーを作成しているうちに、複数の範囲要求を処理できません。複数の範囲に対するHTTP/1.1の応答

RFC 2616の14.35.1項はいくつかの例を示していますが、サーバーの動作を明確にしていません。例えば :

GET /some/resource HTTP/1.1 
... 
Range: bytes=200-400,100-300,500-600 
... 

私はバイトのこの正確な配列を返すべきでしょうか? 100-400,500-600を送信すると、すべての範囲をマージする必要がありますか? または間にすべてを送信、100-600

最悪の場合、Content-Rangeレスポンスヘッダー(14.16節)をチェックすると、1つの範囲しか返されないため、14.35.1節の例に対するサーバーの応答はどのようになるのでしょうか。bytes=0-0,-1 !!!

私のサーバーはどのようにそのような要求を処理する必要がありますか?

答えて

11

私はちょうどRangeヘッダフィールドをサポートする他のサーバが応答してexample.comに迅速curlをしたかもしれない方法を見ていた:

~# curl -s -D - -H "Range: bytes=100-200, 300-400" http://www.example.com 
HTTP/1.1 206 Partial Content 
Accept-Ranges: bytes 
Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5 
Content-Length: 385 
Server: ECS (fll/0761) 


--3d6b6a416f9b5 
Content-Type: text/html 
Content-Range: bytes 100-200/1270 

eta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
    <meta name="vieport" content 
--3d6b6a416f9b5 
Content-Type: text/html 
Content-Range: bytes 300-400/1270 

-color: #f0f0f2; 
     margin: 0; 
     padding: 0; 
     font-family: "Open Sans", "Helvetica 
--3d6b6a416f9b5-- 

どうやら、何あなたが探してはContent-Type: multipart/byteranges; boundaryレスポンスヘッダです。 HTTP 206(部分コンテンツ)応答メッセージは、複数の範囲の含有量(複数の非重複範囲要求に対する応答)を含む場合、正確にグーグルa W3C document with appendices to RFC 2616

を上げている、これらはマルチパートとして送信されますメッセージ本文。この目的のメディアタイプは "multipart/byteranges"と呼ばれます。
multipart/byterangesメディアタイプには、2つ以上の部分が含まれ、それぞれに独自のContent-TypeContent-Rangeフィールドがあります。必要な境界パラメータは、各ボディ部分を区切るために使用される境界文字列を指定します。

だからそこに行く。ところで

example.comでサーバがバイト範囲の重複をチェックし、あなたが要求した正確な範囲を送信していませんが...

+0

あなたはポイントをヒット!私はそれが何らかのサーバ特有の動作を引き起こす可能性があるので、私はそれを試していないと告白しました。ありがとうございました! –

関連する問題