2013-08-19 8 views
9

Durante la scrittura del server HTTP/1.1, mi viene bloccato il problema della richiesta di intervalli multipli.Risposta HTTP/1.1 a più range

La sezione 14.35.1 di RFC 2616 fa riferimento ad alcuni esempi ma non chiarisce il comportamento del server. Per esempio:

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

Devo restituire questo esatta sequenza di byte? Oppure devo unire tutti gli intervalli, inviando 100-400,500-600? Oppure inviando tutto in uno, 100-600?

Peggio, quando si controlla l'intestazione di risposta Content-Range (Sezione 14.16), è possibile restituire solo un intervallo, quindi mi chiedo come reagirebbe un server all'esempio nella Sezione 14.35.1 bytes=0-0,-1 !!!

Come dovrebbe il mio server gestire tali richieste?

risposta

11

Ho appena avuto uno sguardo a come gli altri server che supportano il campo di intestazione Range potrebbe rispondere e ha fatto un rapido 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-- 

A quanto pare, quello che cercate è l'intestazione Content-Type: multipart/byteranges; boundary risposta. Googling esattamente che alzato a W3C document with appendices to RFC 2616

Quando un HTTP 206 (contenuto parziale) messaggio di risposta comprende il contenuto di più intervalli (una risposta a una richiesta di multipli intervalli non sovrapposti), questi vengono trasmessi come multipart corpo del messaggio. Il tipo di supporto per questo scopo è denominato "multipart/byteranges".
Il tipo di supporto multipart/byteranges include due o più parti, ognuna con i propri campi Content-Type e Content-Range. Il parametro boundary richiesto specifica la stringa boundary utilizzata per separare ogni body-part.

Quindi eccoci.

Tra l'altro, il server a example.com non verifica la sovrapposizione intervalli di byte e si invia esattamente gli intervalli che avete richiesto ...

+0

si colpisce il punto! Confesso di non averlo provato perché temevo che potesse comportare un comportamento specifico del server e non uno standard. Grazie! –