Duraklatılabilen indirmeler nasıl çalışır?


19

Verileri indirmek için Internet Download Manager'ı (IDM) kullanıyorum ve indirme ilerleme penceresinde indirme işleminin duraklatılabildiğini (devam ettirilebildiğini) gösterdiğini fark ettim. Genellikle, dosya paylaşım siteleri bağlantı kesilirse aktarımın sürdürülmesine izin vermez.

Yani soru şudur: bu nasıl çalışır? Sunucuda yapılan bazı yapılandırmalar mı? Bu, indirme işleminin her zaman devam edebildiği torrent indirme işlemlerinden nasıl farklıdır?

Yanıtlar:


27

Kodlama açısından bakıldığında, indirme işlemi yalnızca HTTP yanıt akışında bulunan bir bayt dizisidir.

HTTP 1.1 protokolü (sayfa 30) Başlık bir alan talep yanıtın ofset bayt ve uzunluğunu belirlemek için talebine izin 'Aralık' adında içermektedir.

Yani özünde, "bana bu URL'deki HTTP nesnesini ver, ama sadece 1024-4096 baytını istiyorum" diyebilirsiniz. İstemci tarayıcısı daha sonra bayt akışını dosyanın indirilmiş olan bölümüne ekler. İstemci, daha önce indirilmiş olan dosyanın uzunluğunu kontrol ederek nereden devam etmesi gerektiğini söyleyebilir ve gerekli ofseti belirlemek için arttırır.

İndirme yöneticinizin nasıl anlatabileceği konusunda bir HTTP "HEAD" isteği gönderir. Yanıt kodu 206 (kısmi içerik) ise, http akışı sürdürmeyi destekler.


FTP aynı zamanda dosyaları aktarmak için yaygın olarak kullanılan bir protokoldür. Eskiden birincil araçtı, ancak şimdi HTTP muhtemelen daha yaygın.
ChrisInEdmonton

FTP, temelde aynı yapıyı kullanır, ancak onu kullanan kodu uygulamaya çalışmadan önce özellikleri aramak zorunda kalacağım.
Frank Thomas

1

Bu , bir oturum çerezi ile karıştırılmamak için Kalıcı bir çerez kullanılarak ele alınabilir veya site ASP.NET üzerine kurulmuşsa [Viewstate] kullanabilirsiniz, ancak bu iyi bir uygulama değildir. En iyi cevap Frank Thomas.


1
Bu cevabın neden reddedildiğinden emin değilim, bu yüzden cevabımı iptal ettim.
Ramhound

@FrankThomas, üst düzey geliştiricimizle bazı gerçekleri doğruladım ve tarayıcı tabanlı bir indirici aracılığıyla indirmeyi izlemek ve devam ettirmek için kullanılan bayt dizisinin dizin bilgilerini saklamak için Kalıcı bir çerez veya görünüm durumu kullanabileceğinizi söyledi, ancak iyi bir uygulama. Genellikle, bir MS ürünü gibi büyük, devam ettirilebilir dosyalar için bir indirme Yöneticisi uygulaması indirirsiniz ve aynen dediğin gibi çalışır. Cevabınızı iptal ettim.
Josh Campbell

Bu cevap anlamsız görünüyor. Dosyanın ne kadarının indirildiğini belirlemek sorun değil; müşteri bunu zaten biliyor. Bunu bir çerez kullanarak sunucuya geri iletebilirsiniz, ancak çok daha iyi yaklaşımlar vardır. Üstbilgiler, GET veya POST parametreleri, vb. Soru, bir sunucuya bilgi aktarmayı değil dosya aktarımının nasıl devam ettirileceğini sormaktır.
ChrisInEdmonton

OP nasıl çalıştığını sordu ve daha fazla araştırma yapabilmesi için onu Çerezler yönünde işaret ettim. Bir geliştiricinin devam ettirilebilir bir indirici yapmasının bir düzine farklı yolu vardır. Ben bir start-stop endeksi aracılığıyla indirme durumunu izlemek için istemcideki çerezleri kullanarak yapardı ve (indirilen X dizininden Y dizinine) ne kadar indirildiğini hesaplamak için arka uçta C # kullanılan ve sonra Y'den devam. yöneticisi tam olarak aynı şeyi yapar, sadece bilgilerini bir metin dosyasında veya veritabanında saklar. Bu stackoverflow değil, kaynak kodu yazmıyorum.
Josh Campbell

@JoshCampbell, sorun, çözümünüzün yalnızca belirli istemci yazılımınızı ve sunucu yazılımınızı kullanan kişiler için işe yarayacağıdır. Frank'in cevabında belirttiği gibi, bu sorunu çözmenin standart yolları vardır ve özel kodlamaya gerek yoktur. Ayrıca, cevabınız bazı sitelerin OP'nin indirme işlemlerine devam etmesine izin verdiği süreci göstermez ve bu nedenle soruyu cevaplamaz. Bu yüzden yorum yaptım.
ChrisInEdmonton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.