2011-11-28 4 views
82

È possibile mostrarmi una sessione http di esempio con richieste di intervallo. Intendo quali sarebbero le intestazioni di richiesta e risposta?Esempio di sessione richiesta intervallo http

+2

Alcuni mesi fa, il nuovo è stata pubblicata la versione dello standard HTTP/1.1. Ha una RFC speciale per le richieste di intervallo, è molto più leggibile rispetto alla vecchia specifica, inclusi esempi per molti elementi: https://tools.ietf.org/html/rfc7233 – Thirler

risposta

128

Il seguente scambio è tra Chrome e un server Web statico, recuperando un video MP4.

Richiesta iniziale - per il video. Si noti l'intestazione Accept-Ranges risposta per indicare il server ha gamma intestazione supporto:

GET /BigBuckBunny_320x180.mp4 
     Cache-Control: max-age=0 
     Connection: keep-alive 
     Accept-Language: en-GB,en-US,en 
     Host: localhost:8080 
     Range: 
     Accept: text/html,application/xhtml+xml,application/xml,*/* 
     User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ... 
     Accept-Encoding: gzip,deflate,sdch 
     Accept-Charset: ISO-8859-1,utf-8,* 
200 OK 
     Content-Type: video/mp4 
     Connection: keep-alive 
     Last-Modified: Wed,14 Dec 2011 15:50:59 GMT 
     ETag: A023EF02BD589BC472A2D6774EAE3C58 
     Transfer-Encoding: 
     Content-Length: 64657027 
     Accept-Ranges: bytes 
     Server: Brisket/1.0.1 
     Date: Wed,14 Dec 2011 16:11:24 GMT 

Gamma intestazione nella risposta precedente rilevato - successiva richiesta con la gamma open-ended per confermare il supporto. Risposta restituisce un 206 di stato e Content-Range intestazione per indicare i byte presenti nel corpo della risposta: (metadati probabilmente per catturare finale)

GET /BigBuckBunny_320x180.mp4 
     Connection: keep-alive 
     Accept-Language: en-GB,en-US,en 
     Host: localhost:8080 
     Range: bytes=0- 
     Accept: */* 
     User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ... 
     Referer: http://localhost:8080/BigBuckBunny_320x180.mp4 
     Accept-Encoding: identity 
     Accept-Charset: ISO-8859-1,utf-8,* 
206 Partial Content 
     Content-Type: video/mp4 
     Connection: keep-alive 
     Last-Modified: Wed,14 Dec 2011 15:50:59 GMT 
     ETag: A023EF02BD589BC472A2D6774EAE3C58 
     Transfer-Encoding: 
     Content-Length: 64657027 
     Accept-Ranges: bytes 
     Server: Brisket/1.0.1 
     Date: Wed,14 Dec 2011 16:11:25 GMT 
     Content-Range: bytes 0-64657026/64657027 

richiesta di intervallo dopo la cattura alla fine del file:

GET /BigBuckBunny_320x180.mp4 
     Connection: keep-alive 
     Accept-Language: en-GB,en-US,en 
     Host: localhost:8080 
     Range: bytes=64312833-64657026 
     Accept: */* 
     If-Range: A023EF02BD589BC472A2D6774EAE3C58 
     User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ... 
     Referer: http://localhost:8080/BigBuckBunny_320x180.mp4 
     Accept-Encoding: identity 
     Accept-Charset: ISO-8859-1,utf-8,* 
206 Partial Content 
     Content-Type: video/mp4 
     Connection: keep-alive 
     Last-Modified: Wed,14 Dec 2011 15:50:59 GMT 
     ETag: A023EF02BD589BC472A2D6774EAE3C58 
     Transfer-Encoding: 
     Content-Length: 344194 
     Accept-Ranges: bytes 
     Server: Brisket/1.0.1 
     Date: Wed,14 Dec 2011 16:11:25 GMT 
     Content-Range: bytes 64312833-64657026/64657027 

L'utente fa clic sulla barra di avanzamento del video oltre l'intervallo scaricato: viene emessa una richiesta di intervallo per iniziare la riproduzione dalla posizione selezionata:

GET /BigBuckBunny_320x180.mp4 
     Connection: keep-alive 
     Accept-Language: en-GB,en-US,en 
     Host: localhost:8080 
     Range: bytes=1073152-64313343 
     Accept: */* 
     If-Range: A023EF02BD589BC472A2D6774EAE3C58 
     User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 ... 
     Referer: http://localhost:8080/BigBuckBunny_320x180.mp4 
     Accept-Encoding: identity 
     Accept-Charset: ISO-8859-1,utf-8,* 
206 Partial Content 
     Content-Type: video/mp4 
     Connection: keep-alive 
     Last-Modified: Wed,14 Dec 2011 15:50:59 GMT 
     ETag: A023EF02BD589BC472A2D6774EAE3C58 
     Transfer-Encoding: 
     Content-Length: 63240192 
     Accept-Ranges: bytes 
     Server: Brisket/1.0.1 
     Date: Wed,14 Dec 2011 16:11:25 GMT 
     Content-Range: bytes 1073152-64313343/64657027 
+7

L'intestazione di trasferimento-codifica vuota è un artefatto di il modo in cui è stata acquisita la comunicazione HTTP o esiste un vero server HTTP che genera valori vuoti per questa intestazione? – swl10

+7

Nel primo caso, sembra che il server restituisca 64657027 byte di contenuto. Quindi, cosa sta succedendo - il cliente sta semplicemente buttando via quel contenuto, e quindi successivamente emette una richiesta di intervallo per le parti che davvero desidera? Oppure il server non restituisce alcun contenuto perché qualcosa nel messaggio del cliente dice che non lo fanno. Se è così, che cosa è? – Morrie

+2

@Morrie - sembra che il server, sapendo che esso stesso supporta le richieste di intervallo, dice al client "Accetto le richieste di intervallo" tramite l'intestazione Accept-Ranges: bytes, ma invia anche la lunghezza del contenuto per la risorsa in modo che il cliente può fare richieste di intervallo con un limite superiore. Nulla nel messaggio client dice di farlo per quanto ne so - il server può scegliere di rispondere con "qui è l'intera risorsa" o "Accetto richieste di intervallo" - che di nuovo è l'esistenza dell'intestazione "Accept-Ranges" . Questa è la mia comprensione comunque. –