今日何かをダウンロードしていたのですが、1.8 GB しかないことはわかっていましたが、1.8/1.8 GB をダウンロードした後、奇妙なことが起こりました。Chrome はファイルのダウンロードを続け、進行状況バーに読み込みアニメーションが表示され、ファイル サイズは増加し続け、最終的に 2.5 GB で停止しました。それはビデオ ファイルで、ディスク上では 2.5 GB と表示され、再生すらされません。どうしてこのようなことが起こるのでしょうか?
答え1
HTTP プロトコルの一部である多数の応答ヘッダーの 1 つが ヘッダーですContent-Length
。基本的に、これによってサーバーはクライアントに、応答で送信されるデータの大きさを伝えることができます。Chrome は、ほとんどの適切なブラウザと同様に、このヘッダーを使用して、ファイルのダウンロード時に合計ファイル サイズとして何を表示するかを決定するとともに、表示されるダウンロードの進行状況を計算します。
ただし、これには 2 つの問題があります。
- サーバーは、このヘッダーを送信することを厳密に要求されているわけではありません (必要なのは一部の状況のみであり、すべての状況ではありません)。 ローカル ディスク上の実際のファイルについてはサーバーがこのヘッダーを送信しないことはまれですが、動的に生成され、生成時に送信されるコンテンツの場合は珍しくありません (たとえば、一部のクラウド ストレージ サービスによってオンザフライで生成され、顧客がファイルのグループを一度にダウンロードできるようにするための ZIP アーカイブは、このカテゴリに分類されます)。 この場合、Chrome はダウンロードの進行状況を表示しますが、実際の完了率は表示されません。ただし、ダウンロードが継続していることを示す通常の読み込みバーが表示されます。
- 互換性の理由から、ヘッダーが必須ではないが、とにかく送信される場合、ヘッダーは応答のサイズを厳密に示すものではなく、アドバイス情報として扱う必要があります。これにはここで列挙できないほど多くの理由がありますが、結局のところ、リソースを取得(またはダウンロード)するときに、Chrome(およびほとんどのブラウザ)は、ヘッダーの内容が正確であると信頼できないため、サーバーがデータの送信を停止するまでデータの取得を続けます(実際、Chromeはダウンロード時に報告されたファイルサイズと実際のファイルサイズのわずかな不一致を非表示にします)。
あなたのケースで起こったことは、2 番目の問題の結果です。ファイル サイズが「最大」に達し、データを取得し続けた結果、Chrome は最終的に、ダウンロードするファイルのサイズがわからないときのような表示に切り替わりました。考えられる原因は 2 つあり、バグ (サーバーまたは中間システムのいずれか) または悪意のあるアクティビティ (この場合は、中間者攻撃または侵害されたサーバー) のいずれかです。
いずれにせよ、どちらの場合もそのサイトにとって悪い知らせとなる可能性が高いため、ビデオをダウンロードしたサイトの所有者に報告する必要があるでしょう。
ちなみに、Chrome がローカル ディスクに書き込むよりも速くネットワークからファイル全体を取得できた場合、ファイル サイズが増加することなく、これに似た動作も確認できます。