
Mac 版 Chrome で大きなファイルをダウンロードしようとしています。ここのインターネットは不安定です。時々インターネットがダウンしたり、ダウンロードを一時停止したりする必要があります。
ダウンロードを再開することに成功したことはありません。明らかに失敗することもあれば、うまくいっているように見えることもありますが、20 分後には同じ場所に戻ってしまいます。
では、「一時停止」機能は本当に機能するのでしょうか? サードパーティのダウンロード マネージャーは機能しますか?
答え1
それで、「一時停止」機能は本当に機能するのでしょうか?
はい、通常はします。
仕組みは次のとおりです。ファイルをダウンロードするたびに、そのファイルを含む HTTP リクエストをサーバーに送信します。サーバーは、ヘッダーと実際のコンテンツで構成される HTTP メッセージで応答します。
要求されたファイルのサイズがわかっている場合、HTTP ヘッダーによって「コンテンツの長さ」がブラウザに表示されます。
たとえば、PDF ファイルをダウンロードしようとすると、次のような応答が返されます。
charon:~ werner$ curl -I www.ready.gov/business/_downloads/sampleplan.pdf
HTTP/1.1 200 OK
Server: Apache
ETag: "230b73353fc7715f06267967df11be04:1241094925"
Last-Modified: Wed, 29 Apr 2009 20:56:46 GMT
Accept-Ranges: bytes
Content-Length: 293125
Content-Type: application/pdf
Date: Wed, 07 Sep 2011 14:49:33 GMT
Connection: keep-alive
ここで重要なのは、Content-Length
およびAccept-Ranges
フィールドです。
Accept-Ranges
必要に応じて、ファイルに部分ごとにアクセスできることを意味します。Content-Length
ファイル全体のサイズを示します
ダウンロードを開始すると、ブラウザは通常どおりファイルをダウンロードしますが、もちろんダウンロードされたバイト数も記録し、すべてを一時ファイルに保存します。その後、「一時停止」をクリックすると、接続は中止されます。
しかし、ブラウザはダウンロードされたバイト数を知っているので、「再開」をクリックすると、HTTPRange
フィールドを使用して、ファイルのダウンロードをこの時点で続行するように要求できます。これはすべてHTTP 1.1 ヘッダーフィールドの定義:
条件付きまたは無条件のGETメソッドを使用したHTTP取得リクエストは、エンティティの1つ以上のサブ範囲を要求するエンティティ全体ではなく、リクエストの結果として返されるエンティティに適用される Range リクエスト ヘッダーを使用します。
厄介なのは、接続にエラーが発生しやすい場合、Chromeは接続が失われたことを認識できず、ダウンロードされたバイト数が間違って記録されたり、サーバーへの接続を再開できなかったりする可能性があることです。Chromeの内部でこれがどのように行われるかはわかりませんが、かもしれない正常な HTTP リクエストを送信できない場合は、ダウンロードを再開できません。
によるとこの答え理論的には、TCP 接続が手動で閉じられたり中止されたりしても、Chrome はダウンロードを「完了」と見なすことができます。これにより、あなたが説明した「動作しているように見える」という現象が説明できます。
また、一部のサーバーではこのRange
コマンドをサポートしていない可能性がありますが、これはまれだと思います。Rapidshareなどの一部のサイトでは再開できないようです。いくつかのダウンロード。
最後に、ダウンロード マネージャーの使用を検討して、問題が解決するかどうかを確認してください。それ以外では、可能であれば BitTorrent を使用してファイルをダウンロードする方が、通常の HTTP ダウンロードよりも安全なオプションである可能性があります。
答え2
それで、「一時停止」機能は本当に機能するのでしょうか?
いいえ、Google Chrome では動作しません。(一時停止ボタンは動作しますが、一時停止ボタンをクリックしても Google Chrome の内部ではファイルのダウンロードが停止されないようです。ボタンは何もしないようです。これはインターネット接続が失われたときに見られます。これにより Google Chrome が破損し、ブラウザを再開できなくなります)。
テストのために、ファイルのダウンロードを可能にし、ダウンロードの再開もサポートする簡単な Web ページを作成しました。一時停止したダウンロードが Google Chrome でどのように行われるかをテストしたところ、実際にはブラウザで進行中の転送中に「一時停止」をクリックすることはできますが、「再開」をクリックしても HTTP (範囲) 要求は送信されないことがわかりました。
Firefox ブラウザは、HTTP 範囲ヘッダーを介して転送を一時停止し、再開することができるブラウザのようです。
サードパーティのダウンロード マネージャーについてはわかりませんが、HTTP ダウンロードを一時停止および再開できるものがいくつかあるはずです。
答え3
私は個人的に wget と curl をよく使います。
$ wget -c website.com/file.zip
その後、接続が終了したら、同じコマンドをもう一度実行すると、中断したところから続行されます。wget が接続エラーで自動的に終了しない場合は、^C で終了し、上矢印を使用して、ダウンロードが完了するまでコマンドを繰り返し実行します。ループに設定して、終了コード 0 [成功] を返すまで、コマンドを [遅延付きで] 何度も実行するように設定することもできます。
curl も非常に優れています。私はよく wget よりも curl を好みますが、何をしているのかわかっていない限り、通常は wget の方が簡単です。
答え4
2020年から2cを追加、Chrome 85.0.4183.102
貧弱な 4G で 350MB のファイルをダウンロードし始めましたが、他の作業に帯域幅が必要だったので、120MB で一時停止しました。その前の速度は 1 ~ 2MB/秒でした。一時停止したとき、他の Web アクティビティはまだ低帯域幅のように見えました。約 20 分後にダウンロードを再開すると、120MB から 350MB に 5 ~ 10 倍の大きなジャンプがあり、ファイルがダウンロードされました。したがって、Chrome は内部的にまだダウンロードしていると思われます。