¿Cómo funcionan las descargas con pausa?

19

Utilizo Internet Download Manager (IDM) para descargar datos, y he notado que en su ventana de progreso de descarga, muestra si una descarga se puede pausar (reanudar). Por lo general, los sitios de intercambio de archivos no permiten que se reanude la transferencia si se interrumpe la conexión.

Entonces la pregunta es esta: ¿cómo funciona esto? ¿Es alguna configuración que se hace en el servidor? ¿Cómo difiere esto de las descargas de torrent, donde la descarga siempre se puede reanudar?

Rafay
fuente

Respuestas:

27

Desde una perspectiva de codificación, una descarga es solo una matriz de bytes incluida en el flujo de respuesta HTTP.

El protocolo HTTP 1.1 (consulte la página 30) incluye un campo en el Encabezado llamado 'Rango', que permite que la solicitud especifique el desplazamiento de bytes y la longitud de la respuesta solicitada.

Así que, en esencia, puedes decir: "dame el objeto HTTP en esta URL, pero solo quiero los bytes 1024-4096". El navegador del cliente luego agrega la secuencia de bytes a la parte del archivo que ya se descargó. El cliente puede determinar dónde debe reanudarse simplemente comprobando la longitud del archivo ya descargado, y lo incrementa para determinar el desplazamiento requerido.

En cuanto a cómo su administrador de descargas puede verlo, envía una solicitud HTTP "HEAD". Si el código de respuesta es 206 (contenido parcial), la secuencia http admite la reanudación.

Frank Thomas
fuente
FTP también es un protocolo de uso común para transferir archivos. Solía ​​ser el medio principal, aunque ahora HTTP es probablemente más común.
ChrisInEdmonton
FTP usa esencialmente la misma construcción, aunque tendría que buscar los detalles antes de intentar implementar el código que lo usa.
Frank Thomas
1

Esto podría manejarse usando un cookie persistente , que no debe confundirse con una cookie de sesión o puede usar [Viewstate] si el sitio está construido en ASP.NET, sin embargo, esta no es una buena práctica. Frank Thomas tiene la mejor respuesta.

Josh Campbell
fuente
1
No estoy seguro de la razón por la que esta respuesta fue rechazada, así que la voté.
Ramhound
@FrankThomas, acabo de confirmar algunos hechos con nuestro desarrollador principal y dijo que 'podría' usar una cookie persistente o un estado de vista para almacenar la información de índice de la matriz de bytes utilizada para rastrear y reanudar la descarga a través de un descargador basado en un navegador, sin embargo, no fue así Una buena práctica. Por lo general, para archivos grandes reanudables, como un producto de MS, descargaría una aplicación de administrador de descargas y funcionaría tal como dijo. He votado tu respuesta.
Josh Campbell
Esta respuesta parece no tener sentido. No es un problema determinar cuánto del archivo se ha descargado; el cliente ya lo sabe. Puede comunicarlo al servidor utilizando una cookie, pero hay enfoques mucho mejores. Encabezados, parámetros GET o POST, etc. La pregunta es cómo se reanuda la transferencia de archivos, no cómo pasar información a un servidor.
ChrisInEdmonton
El OP preguntó cómo funciona y lo señalé en la dirección de Cookies para que pudiera investigar más. Hay una docena de formas diferentes en que un desarrollador podría hacer un descargador reanudable. Lo habría hecho usando cookies en el cliente para rastrear el estado de la descarga a través de un índice de inicio-parada y usado C # en el back-end para calcular cuánto se descargó (del índice X al índice Y) y luego se reanudó desde Y. Una descarga de escritorio El administrador hace exactamente lo mismo, solo almacena su información en un archivo de texto o base de datos. Esto no es stackoverflow, no estoy escribiendo código fuente.
Josh Campbell
@JoshCampbell, el problema es que su solución funcionaría solo para las personas que usan su software de cliente y software de servidor específico. Hay formas estándar de resolver este problema, como Frank señala en su respuesta, y no es necesario codificarlo de forma personalizada. Además, su respuesta no señala el proceso mediante el cual algunos sitios permiten que el OP reanude las descargas, por lo que no responde la pregunta. Por eso comenté.
ChrisInEdmonton