一時停止可能なダウンロードはどのように機能しますか?


19

インターネットダウンロードマネージャー(IDM)を使用してデータをダウンロードしましたが、ダウンロードの進行状況ウィンドウで、ダウンロードが一時停止可能(再開可能)かどうかを示していることに気付きました。通常、ファイル共有サイトでは、接続が切断された場合、転送を再開できません。

質問はこれです:これはどのように機能しますか?サーバーで行われた設定ですか?これは、ダウンロードが常に再開可能なトレントダウンロードとどのように異なりますか。

回答:


27

コーディングの観点から見ると、ダウンロードはHTTP応答ストリームに含まれる単なるバイト配列です。

HTTP 1.1プロトコルは(ページ30を参照)ヘッダのフィールドは、要求された応答のバイトオフセットおよび長さを指定する要求を可能にする「範囲」と呼ばれる含みます。

したがって、本質的には、「このURLでHTTPオブジェクトを渡してください。ただし、その1024番目から4096番目のバイトだけが必要です」と言うことができます。クライアントブラウザは、ダウンロード済みのファイルの一部にバイトストリームを追加します。クライアントは、すでにダウンロードされているファイルの長さを確認するだけで、再開する必要がある場所を判断し、増分して必要なオフセットを決定できます。

ダウンロードマネージャがどのように判断できるかについては、HTTP "HEAD"リクエストを送信します。応答コードが206(部分コンテンツ)の場合、httpストリームは再開をサポートします。


FTPは、ファイルの転送に一般的に使用されるプロトコルでもあります。以前は主な手段でしたが、現在はおそらくHTTPがより一般的です。
ChrisInEdmonton

FTPは基本的に同じ構造を使用しますが、それを使用するコードを実装する前に詳細を調べる必要があります。
フランクトーマス

1

これは永続Cookieを使用して処理できます。セッションCookieと混同しないようにする か、サイトがASP.NET上に構築されている場合は[Viewstate]を使用できますが、これは良い方法ではありません。フランクトーマスがベストアンサーです。


1
この答えがダウン投票された理由がわからないので、アップ投票しました。
ラムハウンド

@FrankThomas、私たちのシニア開発者にいくつかの事実を確認したところ、ブラウザベースのダウンローダーを介したダウンロードの追跡と再開に使用されるバイト配列のインデックス情報を保存するために永続Cookieまたはビューステートを使用することができると彼は言ったが、そうではなかった良い習慣。通常、MS製品などの大きな再開可能ファイルの場合、ダウンロードマネージャーアプリケーションをダウンロードすると、それはあなたが言ったとおりに機能します。私はあなたの答えを支持しました。
ジョシュキャンベル

この答えは無意味に見えます。ダウンロードされたファイルの量を判断することは問題ではありません。クライアントはこれをすでに知っています。Cookieを使用してサーバーにそれを伝えることができますが、はるかに優れたアプローチがあります。ヘッダー、GETまたはPOSTパラメーターなど。質問は、サーバーに情報を渡す方法ではなく、ファイル転送を再開する方法を尋ねることです。
ChrisInEdmonton

OPは、それがどのように機能するかを尋ね、私は彼がCookiesの方向を指し示したので、彼はさらなる研究を行うことができました。開発者が再開可能なダウンローダーを作成するには、さまざまな方法があります。クライアントのCookieを使用して開始停止インデックスを介してダウンロードステータスを追跡し、バックエンドのC#を使用してダウンロードされた量(インデックスXからインデックスYまで)を計算し、Yから再開しました。デスクトップダウンロードmanagerはまったく同じことを行いますが、その情報のみをテキストファイルまたはデータベースに保存します。これはstackoverflowではありません。私はソースコードを書いていません。
ジョシュキャンベル

@JoshCampbell、問題は、特定のクライアントソフトウェアとサーバーソフトウェアを使用している人だけにソリューションが機能することです。フランクが彼の答えで指摘しているように、この問題を解決する標準的な方法があり、カスタムコードを作成する必要はありません。さらに、あなたの答えは、OPがダウンロードを再開することを許可するサイトがあるプロセスを示していないため、質問に答えません。それが私がコメントした理由です。
ChrisInEdmonton
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.