Bagaimana cara kerja unduhan yang dapat dihentikan sebentar?


19

Saya menggunakan Internet Download Manager (IDM) untuk mengunduh data, dan saya perhatikan bahwa di jendela progres unduhannya, ini menunjukkan apakah unduhan itu dapat dihentikan sebentar (dapat dilanjutkan). Biasanya, situs berbagi file tidak memungkinkan transfer untuk dilanjutkan jika koneksi terputus.

Jadi pertanyaannya adalah ini: bagaimana cara kerjanya? Apakah ini konfigurasi yang dilakukan pada server? Apa bedanya dengan unduhan torrent, di mana unduhan selalu dapat dilanjutkan.

Jawaban:


27

Dari perspektif pengkodean, pengunduhan hanyalah array byte yang disertakan dalam aliran respons HTTP.

The HTTP 1.1 protokol (lihat halaman 30) mencakup lapangan di Header disebut 'Rentang', yang memungkinkan permintaan untuk menentukan byte offset dan panjang respon yang diminta.

Jadi pada dasarnya Anda bisa mengatakan, "beri saya objek HTTP di URL ini, tapi saya hanya ingin 1024 - 4096 byte itu". Browser klien kemudian menambahkan aliran byte ke bagian file yang sudah diunduh. Klien dapat mengetahui di mana ia perlu melanjutkan hanya dengan memeriksa panjang file yang sudah diunduh, dan menambahkannya untuk menentukan offset yang diperlukan.

Tentang bagaimana pengelola unduhan Anda tahu, ia mengirimkan permintaan HTTP "HEAD". Jika kode responsnya 206 (sebagian konten), maka aliran http mendukung dimulainya kembali.


FTP juga merupakan protokol yang biasa digunakan untuk mentransfer file. Dulu merupakan sarana utama, meskipun sekarang HTTP mungkin lebih umum.
ChrisInEdmonton

FTP pada dasarnya menggunakan konstruksi yang sama, meskipun saya harus mencari secara spesifik sebelum saya mencoba menerapkan kode yang menggunakannya.
Frank Thomas

1

Ini dapat ditangani dengan menggunakan cookie yang persisten , jangan dikacaukan dengan cookie sesi atau Anda dapat menggunakan [kondisi tampilan] jika situs ini dibangun di ASP.NET, namun ini bukan praktik yang baik. Frank Thomas memiliki jawaban terbaik.


1
Saya tidak yakin alasan jawaban ini dibatalkan sehingga saya membatalkannya.
Ramhound

@ FrankThomas, saya baru saja mengkonfirmasi beberapa fakta dengan pengembang senior kami dan dia berkata Anda 'bisa' menggunakan cookie yang gigih atau kondisi tampilan untuk menyimpan informasi indeks array byte yang digunakan dalam melacak & melanjutkan pengunduhan melalui pengunduh berbasis browser, namun itu tidak latihan yang bagus. Biasanya, untuk file besar yang dapat dilanjutkan, seperti produk MS, Anda akan mengunduh aplikasi Download manager dan itu akan berfungsi seperti yang Anda katakan. Saya telah membatalkan jawaban Anda.
Josh Campbell

Jawaban ini tampak tidak berarti. Ini bukan masalah menentukan berapa banyak file yang telah diunduh; klien sudah tahu ini. Anda dapat mengomunikasikannya kembali ke server menggunakan cookie, tetapi ada pendekatan yang jauh lebih baik. Header, GET atau POST params, dll. Pertanyaannya adalah menanyakan bagaimana transfer file dilanjutkan, bukan bagaimana menyampaikan informasi ke server.
ChrisInEdmonton

OP bertanya bagaimana cara kerjanya dan saya mengarahkannya ke arah Cookies sehingga dia bisa melakukan penelitian lebih lanjut. Ada selusin cara berbeda yang bisa dilakukan pengembang untuk membuat pengunduh yang dapat dilanjutkan. Saya akan melakukannya menggunakan cookie pada klien untuk melacak status unduhan melalui indeks start-stop dan menggunakan C # pada backend untuk menghitung berapa banyak yang telah diunduh (dari indeks X ke indeks Y) dan kemudian dilanjutkan dari Y. Pengunduhan desktop Manajer melakukan hal yang sama persis, hanya menyimpan informasi dalam file teks atau basis data. Ini bukan stackoverflow, saya tidak menulis kode sumber.
Josh Campbell

@JoshCampbell, masalahnya adalah solusi Anda hanya akan berfungsi untuk orang yang menggunakan perangkat lunak klien khusus Anda dan perangkat lunak server. Ada cara standar untuk memecahkan masalah ini, seperti yang ditunjukkan Frank dalam jawabannya, dan tidak perlu kode kustom. Selain itu, jawaban Anda tidak menunjukkan proses di mana beberapa situs mengizinkan OP untuk melanjutkan unduhan, dan karenanya tidak menjawab pertanyaan. Itu sebabnya saya berkomentar.
ChrisInEdmonton
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.