È 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
risposta
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
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
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
@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. –
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