การดาวน์โหลดการหยุดชั่วคราวสามารถทำงานได้อย่างไร


19

ฉันใช้ Internet Download Manager (IDM) เพื่อดาวน์โหลดข้อมูลและฉันสังเกตเห็นว่าในหน้าต่างความคืบหน้าการดาวน์โหลดจะแสดงว่าการดาวน์โหลดนั้นหยุดชั่วคราวหรือไม่ (กลับมาใช้ได้) โดยทั่วไปแล้วไซต์แบ่งปันไฟล์จะไม่อนุญาตให้ทำการถ่ายโอนต่อหากการเชื่อมต่อขาด

ดังนั้นคำถามคือสิ่งนี้ทำงานอย่างไร มีการกำหนดค่าบางอย่างที่ทำในเซิร์ฟเวอร์หรือไม่ สิ่งนี้แตกต่างจากการดาวน์โหลดฝนตกหนักอย่างไรซึ่งการดาวน์โหลดนั้นสามารถทำต่อได้เสมอ

คำตอบ:


27

จากมุมมองการเข้ารหัสการดาวน์โหลดเป็นเพียงอาร์เรย์ไบต์ที่รวมอยู่ในสตรีมการตอบกลับ HTTP

HTTP 1.1 โปรโตคอล (ดูหน้า 30) รวมถึงข้อมูลในส่วนหัวที่เรียกว่า 'ช่วง' ซึ่งจะช่วยให้การร้องขอไปยังระบุไบต์ชดเชยและระยะเวลาของการตอบสนองการร้องขอ

ดังนั้นในสาระสำคัญคุณสามารถพูดว่า "ให้ฉันวัตถุ HTTP ที่ URL นี้ แต่ฉันต้องการ 1024th - 4096th ไบต์ของมัน" เบราว์เซอร์ไคลเอ็นต์จะต่อท้ายสตรีมไบต์ไปยังส่วนของไฟล์ที่ดาวน์โหลดไปแล้ว ลูกค้าสามารถบอกได้ว่าต้องการใช้งานต่อที่ใดโดยการตรวจสอบความยาวของไฟล์ที่ดาวน์โหลดไปแล้วและเพิ่มขึ้นเพื่อกำหนดออฟเซ็ตที่ต้องการ

สำหรับวิธีที่ตัวจัดการการดาวน์โหลดของคุณสามารถบอกได้มันจะส่งคำขอ HTTP "HEAD" หากรหัสการตอบสนองคือ 206 (เนื้อหาบางส่วน) ดังนั้นสตรีม http จะสนับสนุนการเริ่มต้นใหม่อีกครั้ง


FTP เป็นโปรโตคอลที่ใช้กันทั่วไปสำหรับการถ่ายโอนไฟล์ มันเคยเป็นวิธีการหลัก แต่ตอนนี้ HTTP อาจเป็นเรื่องธรรมดามากขึ้น
ChrisInEdmonton

FTP ใช้โครงสร้างที่เหมือนกันเป็นหลักแม้ว่าฉันจะต้องค้นหาข้อมูลเฉพาะก่อนที่จะพยายามใช้โค้ดที่ใช้งาน
Frank Thomas

1

สิ่งนี้สามารถจัดการได้โดยใช้คุกกี้แบบถาวรเพื่อไม่ให้สับสนกับคุกกี้เซสชัน หรือคุณสามารถใช้ [Viewstate] หากไซต์นั้นสร้างขึ้นบน ASP.NET อย่างไรก็ตามนี่ไม่ใช่วิธีปฏิบัติที่ดี Frank Thomas มีคำตอบที่ดีที่สุด


1
ฉันไม่แน่ใจว่าเหตุผลที่คำตอบนี้ถูกลดระดับลงดังนั้นฉันจึงลงคะแนน
Ramhound

@ Frankthomas ฉันเพิ่งยืนยันข้อเท็จจริงบางอย่างกับผู้พัฒนาอาวุโสของเราและเขาบอกว่าคุณสามารถใช้คุกกี้แบบถาวรหรือ viewstate เพื่อจัดเก็บข้อมูลดัชนีอาร์เรย์ของไบต์ที่ใช้ในการติดตามและกลับมาดาวน์โหลดผ่านเบราว์เซอร์ที่ใช้ดาวน์โหลดได้ การปฏิบัติที่ดี โดยทั่วไปแล้วสำหรับไฟล์ที่ทำงานต่อได้ขนาดใหญ่เช่นผลิตภัณฑ์ MS คุณจะต้องดาวน์โหลดแอปพลิเคชั่นตัวจัดการดาวน์โหลดและมันก็ใช้ได้เหมือนที่คุณพูด ฉันยกระดับคำตอบของคุณ
Josh Campbell

คำตอบนี้ดูเหมือนไม่มีความหมาย ไม่ใช่ปัญหาในการพิจารณาจำนวนไฟล์ที่ถูกดาวน์โหลด ลูกค้ารู้เรื่องนี้แล้ว คุณสามารถสื่อสารกลับไปที่เซิร์ฟเวอร์โดยใช้คุกกี้ แต่มีวิธีการที่ดีกว่ามาก ส่วนหัว GET หรือ POST params เป็นต้นคำถามจะถามว่าการถ่ายโอนไฟล์ต่อไปอย่างไรไม่ใช่วิธีการส่งผ่านข้อมูลไปยังเซิร์ฟเวอร์
ChrisInEdmonton

OP ถามว่ามันทำงานอย่างไรและฉันก็ชี้ให้เขาเห็นทิศทางของคุกกี้เพื่อที่เขาจะได้ทำการวิจัยเพิ่มเติม มีหลายวิธีที่นักพัฒนาซอฟต์แวร์สามารถทำการดาวน์โหลดต่อได้ ฉันจะทำมันโดยใช้คุกกี้บนไคลเอนต์เพื่อติดตามสถานะการดาวน์โหลดผ่านดัชนีเริ่มต้นและใช้ C # บนแบ็กเอนด์เพื่อคำนวณจำนวนที่ดาวน์โหลด (จากดัชนี X ถึงดัชนี Y) จากนั้นกลับมาจาก Y ดาวน์โหลดเดสก์ทอป ผู้จัดการทำสิ่งเดียวกันแน่นอนเพียงเก็บข้อมูลไว้ในไฟล์ข้อความหรือฐานข้อมูล นี่ไม่ใช่ stackoverflow ฉันไม่ได้เขียนซอร์สโค้ด
Josh Campbell

@JoshCampbell ปัญหาคือว่าโซลูชันของคุณจะทำงานกับคนที่ใช้ซอฟต์แวร์ไคลเอ็นต์และซอฟต์แวร์เซิร์ฟเวอร์เฉพาะของคุณเท่านั้น มีวิธีการมาตรฐานในการแก้ปัญหานี้ตามที่ Frank ชี้ให้เห็นในคำตอบของเขาและไม่จำเป็นต้องกำหนดรหัสเอง นอกจากนี้คำตอบของคุณไม่ได้ชี้ให้เห็นถึงกระบวนการที่บางเว็บไซต์อนุญาตให้ OP ทำการดาวน์โหลดต่อและไม่ตอบคำถาม นั่นเป็นเหตุผลที่ฉันแสดงความคิดเห็น
ChrisInEdmonton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.