일시 중지 가능 다운로드는 어떻게 작동합니까?


19

데이터 다운로드에 IDM (Internet Download Manager)을 사용하고 있으며 다운로드 진행률 창에서 다운로드가 일시 중지 가능 (재개 가능)인지 여부를 보여줍니다. 일반적으로 파일 공유 사이트에서는 연결이 끊어진 경우 전송을 다시 시작할 수 없습니다.

문제는 이것입니다. 어떻게 작동합니까? 서버에서 수행 된 구성입니까? 다운로드가 항상 재개 가능한 토렌트 다운로드와 다른 점은 무엇입니까?

답변:


27

코딩 관점에서 다운로드는 HTTP 응답 스트림에 포함 된 바이트 배열 일뿐입니다.

HTTP 1.1 프로토콜 (30 페이지 참조) 헤더 필드 요청 응답 오프셋 및 바이트 길이를 지정하기위한 요청을 허용 '범위'라는 포함한다.

따라서 본질적으로 "이 URL에 HTTP 객체를 제공하지만 1024 ~ 4096 바이트 만 원합니다"라고 말할 수 있습니다. 그런 다음 클라이언트 브라우저는 바이트 스트림을 이미 다운로드 한 파일 부분에 추가합니다. 클라이언트는 이미 다운로드 한 파일의 길이를 확인하여 단순히 다시 시작해야하는 위치를 알려주고 필요한 오프셋을 결정하기 위해 파일을 증가시킵니다.

다운로드 관리자가 알리는 방법에 대해 HTTP "HEAD"요청을 보냅니다. 응답 코드가 206 (부분 컨텐츠)이면 http 스트림은 재개를 지원합니다.


FTP는 파일 전송에 일반적으로 사용되는 프로토콜입니다. 예전에는 HTTP가 더 일반적 일지라도 기본 수단이었습니다.
ChrisInEdmonton

FTP는 본질적으로 동일한 구조를 사용하지만, 그것을 사용하는 코드를 구현하기 전에 세부 사항을 찾아야합니다.
Frank Thomas

1

이것은 퍼시 스턴트 쿠키를 사용하여 처리 될 수 있고 , 세션 쿠키 와 혼동되지 않거나 사이트가 ASP.NET에 구축 된 경우 [Viewstate]를 사용할 수 있지만 이는 좋은 방법이 아닙니다. 프랭크 토마스가 가장 좋은 답을 가지고 있습니다.


1
이 답변이 다운 보트 된 이유를 잘 모르겠으므로이를 업 보트했습니다.
Ramhound

@ FrankThomas, 수석 개발자와 몇 가지 사실을 확인했으며 브라우저 기반 다운로더를 통해 다운로드를 추적하고 다시 시작하는 데 사용되는 바이트 배열의 색인 정보를 저장하는 데 영구 쿠키 또는 viewstate를 사용할 수 있다고 말했지만 그렇지 않았습니다. 좋은 연습. 일반적으로 MS 제품과 같은 재개 가능한 대용량 파일의 경우 다운로드 관리자 응용 프로그램을 다운로드하면 말한대로 작동합니다. 나는 당신의 대답을 옹호했습니다.
Josh Campbell

이 답변은 의미가 없습니다. 다운로드 된 파일의 양을 결정하는 것은 문제가되지 않습니다. 클라이언트는 이것을 이미 알고 있습니다. 쿠키를 사용하여 서버와 다시 통신 할 수 있지만 훨씬 더 나은 방법이 있습니다. 헤더, GET 또는 POST 매개 변수 등. 정보는 서버로 정보를 전달하는 방법이 아니라 파일 전송이 재개되는 방법을 묻습니다.
ChrisInEdmonton

OP는 어떻게 작동하는지 물었고 쿠키의 방향을 지적하여 추가 연구를 할 수있었습니다. 개발자가 재개 가능한 다운로더를 만들 수있는 다양한 방법이 있습니다. 클라이언트에서 쿠키를 사용하여 시작 중지 인덱스를 통해 다운로드 상태를 추적하고 백엔드에서 C #을 사용하여 다운로드 한 양 (인덱스 X에서 인덱스 Y로)을 계산 한 다음 Y에서 다시 시작한 양을 계산했습니다. manager는 똑같은 작업을 수행하며 정보는 텍스트 파일이나 데이터베이스에 저장합니다. 이것은 stackoverflow가 아니며 소스 코드를 작성하지 않습니다.
Josh Campbell

@JoshCampbell, 문제는 솔루션이 특정 클라이언트 소프트웨어 및 서버 소프트웨어를 사용하는 사람들에게만 작동한다는 것입니다. Frank가 자신의 답변에서 지적 했듯이이 문제를 해결하는 표준 방법이 있으며 사용자 정의 코드를 작성할 필요가 없습니다. 또한 귀하의 답변에 따라 일부 사이트에서 OP가 다운로드를 재개 할 수 있도록하는 프로세스가 제시되지 않으므로 질문에 답변하지 않습니다. 그래서 제가 댓글을 달았습니다.
ChrisInEdmonton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.