leer el archivo del servidor con algún desplazamiento

¿Cómo puedo leer el archivo del servidor que comienza con algún desplazamiento (comportamiento similar a wget -c )? ¿Qué encabezados debo enviar al servidor? ¿Qué futuros debe soportar el servidor?

Debe utilizar el encabezado de Range en la solicitud. Pero puede usarlo solo si el servidor le informa que acepta la solicitud de rango por el encabezado de respuesta Accept-Ranges .

Esta es una sesión de ejemplo. Supongamos que estamos interesados ​​en obtener una parte de esta imagen . Primero, enviamos una solicitud HTTP HEAD para determinar: a) si el servidor admite rangos de bytes, b) la longitud del contenido:

 > HEAD /2238/2758537173_670161cac7_b.jpg HTTP/1.1 > Host: farm3.static.flickr.com > Accept: */* > < HTTP/1.1 200 OK < Date: Thu, 08 Jul 2010 12:22:12 GMT < Content-Type: image/jpeg < Connection: keep-alive < Server: Apache/2.0.52 (Red Hat) < Expires: Mon, 28 Jul 2014 23:30:00 GMT < Last-Modified: Wed, 13 Aug 2008 06:13:54 GMT < Accept-Ranges: bytes < Content-Length: 350015 

A continuación, enviamos una solicitud GET con el encabezado de Range solicitando los primeros 11 bytes de la imagen:

 > GET /2238/2758537173_670161cac7_b.jpg HTTP/1.1 > Host: farm3.static.flickr.com > Accept: */* > Range: bytes=0-10 > < HTTP/1.1 206 Partial Content < Date: Thu, 08 Jul 2010 12:26:54 GMT < Content-Type: image/jpeg < Connection: keep-alive < Server: Apache/2.0.52 (Red Hat) < Expires: Mon, 28 Jul 2014 23:30:00 GMT < Last-Modified: Wed, 13 Aug 2008 06:13:54 GMT < Accept-Ranges: bytes < Content-Range: bytes 0-10/350015 < Content-Length: 11 < 

Este es un volcado hexadecimal de los primeros 11 bytes:

 00000000 ff d8 ff e0 00 10 4a 46 49 46 00 |......JFIF.| 0000000b 

Para obtener más información, consulte la especificación del encabezado de rango en HTTP RFC 2616.

En http://www.gnu.org/software/wget/manual/wget.html

Tenga en cuenta que ‘-c’ solo funciona con servidores ftp y servidores http que admiten el encabezado de rango.

En http://tools.ietf.org/html/rfc2616

Ejemplos de valores de especificación de rangos de bytes (asumiendo un cuerpo de entidad de
longitud 10000):

  - The first 500 bytes (byte offsets 0-499, inclusive): bytes=0- 499 - The second 500 bytes (byte offsets 500-999, inclusive): bytes=500-999 - The final 500 bytes (byte offsets 9500-9999, inclusive): bytes=-500 - Or bytes=9500- - The first and last bytes only (bytes 0 and 9999): bytes=0-0,-1 - Several legal but not canonical specifications of the second 

500 bytes (bytes compensados ​​500-999, inclusive): bytes = 500-600,601-999 bytes = 500-700,601-999

Así que deberías enviar

 Range:bytes=9500- 

Para probar si un servidor lo admite, puede probar el rango de aceptación como tal

Los servidores de origen que aceptan solicitudes de rango de bytes PUEDEN enviarse

Rangos de aceptación: bytes

pero no están obligados a hacerlo. Los clientes PUEDEN generar solicitudes de rango de bytes sin haber recibido este encabezado para el recurso involucrado. Las unidades de rango se definen en la sección 3.12.

Los servidores que no aceptan ningún tipo de solicitud de rango para un recurso PUEDEN enviarse

 Accept-Ranges: none 

Aconsejar al cliente que no intente una solicitud de rango.