2011-11-28 20 views
82

¿Es posible mostrarme una sesión http de ejemplo con solicitudes de rango? Quiero decir, ¿cuáles serían los encabezados de solicitud y respuesta?Muestra de solicitud de rango http sesión

+2

Hace unos meses el nuevo versión del estándar HTTP/1.1 fue publicada. Tiene un RFC especial para solicitudes de rango, esto es mucho más legible que la especificación anterior, incluyendo ejemplos para muchos elementos: https://tools.ietf.org/html/rfc7233 – Thirler

Respuesta

128

El siguiente intercambio se realiza entre Chrome y un servidor web estático, recuperando un video MP4.

Solicitud inicial - para el video. Tenga en cuenta la cabecera Accept-Ranges respuesta para indicar que el servidor tiene soporte cabecera rango:

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 

encabezado Rango en respuesta anterior detectada - solicitud posterior con un rango de composición abierta para confirmar el apoyo. Respuesta devuelve un 206 de estado y Content-Range cabecera para indicar los bytes presentes en el cuerpo de la respuesta: (metadatos probablemente para capturar detrás)

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 

solicitud rango después de la captura del final del archivo:

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 

El usuario hace clic en la barra de progreso del video más allá del rango descargado; se emite una solicitud de rango para comenzar a jugar desde la posición seleccionada:

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

El encabezado de codificación de transferencia en blanco es un artefacto de la forma en que se capturó la comunicación HTTP o existe un servidor HTTP real generando valores en blanco para este encabezado? – swl10

+7

En el primer caso, parece que el servidor está devolviendo 64657027 bytes de contenido. Entonces, ¿qué está pasando? ¿El cliente está desechando ese contenido y luego publica una solicitud de rango para las partes realmente desea? O el servidor no devuelve ningún contenido porque algo en el mensaje del cliente dice que no haga eso. Si es así, ¿qué es? – Morrie

+2

@Morrie: parece que el servidor, sabiendo que admite solicitudes de rango, le dice al cliente "Acepto las solicitudes de rango" a través del encabezado 'Accept-Ranges: bytes', pero también envía la longitud del contenido del recurso para que el el cliente puede hacer solicitudes de rango con un límite superior. Nada en el mensaje del cliente dice que haga esto, que yo sepa, el servidor puede elegir responder "aquí está el recurso completo" o "acepto solicitudes de rango", que nuevamente es la existencia del encabezado 'Aceptar rangos' . Esa es mi comprensión de todos modos. –