Ich habe heute etwas heruntergeladen und weiß, dass es nur 1,8 GB groß ist, aber nachdem ich 1,8/1,8 GB heruntergeladen hatte, passierte etwas ganz Seltsames. Chrome lud die Datei weiter herunter, und der Fortschrittsbalken zeigte die Ladeanimation an, und die Dateigröße nahm immer weiter zu, bis sie schließlich nach 2,5 GB stoppte. Es war eine Videodatei, und auf meiner Festplatte steht, dass sie 2,5 GB groß ist, und sie lässt sich nicht einmal abspielen. Wie kann so etwas passieren?
Antwort1
Einer der zahlreichen Antwortheader, die Teil des HTTP-Protokolls sind, ist der Content-Length
Header. Damit kann der Server dem Client im Wesentlichen mitteilen, wie groß die in der Antwort gesendeten Daten sind. Chrome verwendet wie die meisten vernünftigen Browser diesen Header, um zu bestimmen, was beim Herunterladen einer Datei als Gesamtdateigröße angezeigt werden soll, und um den angezeigten Downloadfortschritt zu berechnen.
Dies bringt jedoch zwei Probleme mit sich:
- Server sind nicht unbedingt verpflichtet, diesen Header zu senden (er wird nur in einigen Fällen benötigt, nicht in allen). Es kommt selten vor, dass Server ihn nicht senden, wenn es sich um tatsächliche Dateien auf ihrer lokalen Festplatte handelt, aber es ist nicht ungewöhnlich, wenn es sich um Inhalte handelt, die dynamisch generiert und gesendet werden, während sie generiert werden (z. B. fallen ZIP-Archive, die von einigen Cloud-Speicherdiensten spontan generiert werden, damit Kunden Gruppen von Dateien auf einmal herunterladen können, in diese Kategorie). In diesem Fall zeigt Chrome den Downloadfortschritt ohne einen tatsächlichen Prozentsatz der Fertigstellung an, aber den üblichen Ladebalken, der angibt, dass der Download fortgesetzt wird.
- Aus Kompatibilitätsgründen muss der Header in Fällen, in denen er nicht erforderlich ist, aber trotzdem gesendet wird, als Hinweisinformation behandelt werden und nicht als strikte Angabe der Größe der Antwort. Es gibt zu viele Gründe, um sie hier aufzulisten, aber das Fazit ist, dass Chrome (und die meisten Browser) beim Abrufen (oder Herunterladen) einer Ressource so lange Daten abrufen, bis der Server in diesen Fällen aufhört, sie zu senden, weil sie nicht darauf vertrauen können, dass die Angaben im Header korrekt sind (tatsächlich verbirgt Chrome beim Herunterladen kleinere Abweichungen zwischen der gemeldeten Dateigröße und der tatsächlichen Dateigröße).
Was in Ihrem Fall passiert ist, war eine Folge dieses zweiten Problems. Als die „volle“ Dateigröße erreicht war und weiterhin Daten abgerufen wurden, wechselte Chrome schließlich dazu, Dinge so anzuzeigen, wie es dies tut, wenn es die Größe der heruntergeladenen Datei nicht kennt. Die beiden möglichen Ursachen, die mir dafür in den Sinn kommen, sind entweder ein Fehler (entweder im Server oder in einem Zwischensystem) oder böswillige Aktivitäten (wahrscheinlich ein Man-in-the-Middle-Angriff oder ein kompromittierter Server, wenn dies der Fall ist).
In jedem Fall sollten Sie dies dem Eigentümer der Site melden, von der Sie das Video heruntergeladen haben, da beide Fälle für ihn wahrscheinlich schlechte Nachrichten bedeuten.
Nebenbei bemerkt können Sie ein ähnliches Verhalten, jedoch ohne die zunehmende Dateigröße, auch beobachten, wenn Chrome die gesamte Datei schneller aus dem Netzwerk abrufen könnte, als es sie auf die lokale Festplatte schreiben könnte.