Come funzionano i download in grado di mettere in pausa?


19

Uso Internet Download Manager (IDM) per il download dei dati e ho notato che nella finestra di avanzamento del download mostra se un download è in pausa o meno (ripristinabile). In genere, i siti di condivisione file non consentono di riprendere il trasferimento in caso di interruzione della connessione.

Quindi la domanda è questa: come funziona? È una configurazione che viene eseguita sul server? In che modo differisce dai download di torrent, in cui il download è sempre ripristinabile.

Risposte:


27

Dal punto di vista della codifica, un download è solo un array di byte incluso nel flusso di risposta HTTP.

Il protocollo HTTP 1.1 (vedi pagina 30) include un campo nell'intestazione chiamato "Range", che consente alla richiesta di specificare l'offset di byte e la lunghezza della risposta richiesta.

Quindi, in sostanza, puoi dire "dammi l'oggetto HTTP a questo URL, ma ne voglio solo i 1024 - 4096 byte". Il browser client quindi aggiunge il flusso di byte alla parte del file già scaricato. Il client può dire dove deve riprendere semplicemente controllando la lunghezza del file già scaricato e lo incrementa per determinare l'offset richiesto.

Per quanto riguarda il modo in cui il gestore dei download può dire, invia una richiesta HTTP "HEAD". Se il codice di risposta è 206 (contenuto parziale), il flusso http supporta la ripresa.


FTP è anche un protocollo comunemente usato per il trasferimento di file. Era il mezzo principale, anche se ora HTTP è probabilmente più comune.
ChrisInEdmonton,

FTP utilizza essenzialmente lo stesso costrutto, anche se dovrei cercare i dettagli prima di tentare di implementare il codice che lo utilizza.
Frank Thomas,

1

Questo potrebbe essere gestito utilizzando un cookie persistente , da non confondere con un cookie di sessione oppure è possibile utilizzare [Viewstate] se il sito è basato su ASP.NET, tuttavia questa non è una buona pratica. Frank Thomas ha la migliore risposta.


1
Non sono sicuro del motivo per cui questa risposta è stata sottoposta a downgrade, quindi l'ho votata.
Ramhound,

@FrankThomas, ho appena confermato alcuni fatti con il nostro sviluppatore senior e ha detto che 'potresti' usare un cookie persistente o viewstate per archiviare le informazioni sull'indice dell'array di byte utilizzate per tracciare e riprendere il download tramite un downloader basato su browser, tuttavia non lo era una buona pratica. In genere, per file ripristinabili di grandi dimensioni, ad esempio un prodotto MS, si scarica un'applicazione di gestione download e funziona esattamente come si è detto. Ho votato a fondo la tua risposta.
Josh Campbell,

Questa risposta sembra insignificante. Non è un problema determinare la quantità di file scaricata; il cliente lo sa già. Puoi comunicarlo al server utilizzando un cookie, ma esistono approcci di gran lunga migliori. Intestazioni, parametri GET o POST, ecc. La domanda è: come riprendere il trasferimento dei file, non come passare le informazioni a un server.
ChrisInEdmonton,

L'OP ha chiesto come funziona e io l'ho indicato nella direzione dei cookie in modo che potesse fare ulteriori ricerche. Esistono una dozzina di modi diversi in cui uno sviluppatore può creare un downloader ripristinabile. L'avrei fatto usando i cookie sul client per tracciare lo stato del download tramite un indice start-stop e avrei usato C # sul backend per calcolare quanto è stato scaricato (dall'indice X all'indice Y) e poi ripreso da Y. Un download desktop manager fa esattamente la stessa cosa, solo memorizza le sue informazioni in un file di testo o database. Questo non è stackoverflow, non sto scrivendo codice sorgente.
Josh Campbell,

@JoshCampbell, il problema è che la tua soluzione funzionerebbe solo per le persone che utilizzano il tuo software client e software server specifico. Esistono modi standard per risolvere questo problema, come sottolinea Frank nella sua risposta, e non è necessario codificarne uno personalizzato. Inoltre, la tua risposta non indica il processo mediante il quale alcuni siti consentono all'OP di riprendere i download e quindi non risponde alla domanda. Ecco perché ho commentato.
ChrisInEdmonton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.