2013-08-19 20 views
9

Während ich meinen HTTP/1.1-Server schreibe, stehe ich auf der Suche nach mehreren Bereichen.HTTP/1.1-Antwort auf mehrere Bereiche

Abschnitt 14.35.1 von RFC 2616 verweist auf einige Beispiele, aber nicht das Serververhalten. Zum Beispiel:

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

Sollte ich wieder diese genaue Reihenfolge der Bytes? Oder sollte ich alle Bereiche zusammenführen, Senden ? Oder senden alle dazwischen, 100-600?

Am schlechtesten, wenn Überprüfung Content-Range Response-Header (Abschnitt 14.16), nur ein einzelner Bereich zurückgegeben werden kann, so frage ich mich, wie würde eine Server-Antwort auf Beispiel in Abschnitt 14.35.1 bytes=0-0,-1 !!!

Wie sollte mein Server solche Anfragen behandeln?

Antwort

11

Ich hatte gerade einen Blick darauf, wie andere Server, die den Range Header-Feld unterstützen könnten reagieren und habe eine schnelle curl-example.com:

~# 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-- 

Offenbar, was Ihr suchen, ist die Content-Type: multipart/byteranges; boundary Antwort-Header. Googling genau das, werden diese als ein mehrteiliger übertragen a W3C document with appendices to RFC 2616

Wenn eine HTTP 206 (Partial Inhalt) Antwortnachricht enthält den Inhalt mehrerer Bereiche (für mehr nicht überlappende Bereiche eine Antwort auf eine Anfrage) nach oben gedreht Nachrichtentext. Der Medientyp für diesen Zweck heißt "multipart/byteranges".
Der Medientyp multipart/byteranges enthält zwei oder mehr Teile mit jeweils eigenen Feldern Content-Type und Content-Range. Der erforderliche boundary-Parameter gibt die Begrenzungszeichenfolge an, die zum Trennen jedes Körperteils verwendet wird.

Also los gehts.

By the way, der Server bei example.com prüft nicht Bytebereichen für überlappende und sendet Ihnen genau die Bereiche, die Sie angefordert ...

+0

Sie traf den Punkt! Ich gestehe, dass ich es nicht versucht habe, weil ich befürchtete, dass dies zu einem serverspezifischen Verhalten und nicht zu einem Standard führen könnte. Vielen Dank! –