14Sep

Warum kann mein Webbrowser manchmal die verbleibenden Downloadzeiten nicht anzeigen?

Manchmal wirft der treue Download-Fortschrittszähler in Ihrem Browser( oder einer anderen Anwendung) einfach die Hände in die Luft und gibt die Anzeige der verbleibenden Download-Zeit auf. Warum nagt es manchmal an der voraussichtlichen Download-Zeit und kann manchmal nicht alle zusammen berichten?

Die heutige Frage &Die Antwortsitzung kommt dank SuperUser, einer Unterteilung von Stack Exchange, einer Community-gesteuerten Gruppierung von Q & A-Websites, zu uns.

Die Frage

SuperUser-Leser Coldblackice möchte wissen, warum sein Browser nicht immer den Schmutz aufräumt:

Gelegentlich "weiß" der Download-Fortschritt beim Herunterladen einer Datei in einem Webbrowser nicht die Gesamtgröße der Datei, oderWie weit ist es im Download - es zeigt nur die Geschwindigkeit an, mit der es heruntergeladen wird, mit einem Gesamtwert von "Unbekannt".

Warum sollte der Browser die endgültige Größe einiger Dateien nicht kennen? Woher bekommt es diese Information überhaupt?

Wo in der Tat?

Die Antworten

SuperUser-Mitwirkender Gronostaj bietet folgenden Einblick:

Um Dokumente von Webservern anzufordern, verwenden Browser das HTTP-Protokoll. Sie können diesen Namen aus Ihrer Adressleiste kennen( er kann jetzt ausgeblendet sein, aber wenn Sie auf die Adressleiste klicken, kopieren Sie die URL und fügen Sie sie in einen Texteditor ein. Am Anfang sehen Sie http: //).Es ist ein einfaches textbasiertes Protokoll und es funktioniert folgendermaßen:

Zunächst verbindet sich Ihr Browser mit dem Server der Website und sendet eine URL des Dokuments, das heruntergeladen werden soll( Webseiten sind auch Dokumente) und einige Details über den Browser selbst( Benutzer-Agent usw.).Um beispielsweise die Hauptseite der SuperUser-Site http: //superuser.com/ zu laden, sendet mein Browser eine Anfrage, die folgendermaßen aussieht:

GET / HTTP / 1.1 Host: superuser.com Verbindung: keep-alive Akzeptieren: text / html, application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agent: Mozilla / 5.0( Windows NT 6.1; WOW64) Akzeptieren-Encoding: gzip, deflate, sdch Akzeptieren-Sprache: pl-PL, pl; q = 0.8, de-DE; q = 0.6, en; q = 0.4 Cookie: [aus Sicherheitsgründen entfernt] DNT: 1 If-Modified-Since: Di, 09 Jul 2013 07:14:17 GMT

Der ersteZeile gibt an, welches Dokument der Server zurückgeben soll. Die anderen Zeilen heißen Header;Sie sehen so aus:

Header-Name: Header-Wert

Diese Zeilen senden zusätzliche Informationen, die dem Server bei der Entscheidung helfen, was zu tun ist.

Wenn alles in Ordnung ist, wird der Server antworten, indem er das angeforderte Dokument sendet. Die Antwort beginnt mit einer Statusmeldung, gefolgt von einigen Kopfzeilen( mit Details zum Dokument) und schließlich, wenn alles in Ordnung ist, dem Inhalt des Dokuments. So sieht die Antwort des SuperUser-Servers für meine Anfrage aus:

HTTP / 1.1 200 OK Cache-Control: public, max-age = 60 Inhaltstyp: text / html;charset = utf-8 Läuft ab: Di, 09 Jul 2013 07:27:20 GMT Zuletzt geändert: Di, 09 Jul 2013 07:26:20 GMT Variieren: * X-Frame-Optionen: SAMEORIGIN Datum: Di, 09 Jul 201307:26:19 GMT Inhaltslänge: 139672 & lt;! DOCTYPE html & gt;& lt; html & gt;[... snip. ..] & lt; / html & gt;

Nach der letzten Zeile schließt der SuperUser-Server die Verbindung.

Die erste Zeile( HTTP / 1.1 200 OK) enthält den Antwortcode, in diesem Fall 200 OK.Dies bedeutet, dass der Server ein angefordertes Dokument zurückgibt. Wenn der Server dies nicht schafft, wird der Code etwas anderes sein: Sie haben wahrscheinlich 404 Not Found gesehen, und 403 Forbidden ist auch ziemlich verbreitet. Dann folgen die Header.

Wenn der Browser eine leere Zeile in der Antwort findet, weiß er, dass alles, was über diese Zeile hinausgeht, der Inhalt des angeforderten Dokuments ist. Also in diesem Fall & lt;! DOCTYPE html & gt;ist die erste Zeile des SuperUser-Homepage-Codes. Wenn ich ein Dokument zum Herunterladen anforderte, würde es wahrscheinlich einige Kauderwelsch-Zeichen geben, da die meisten Dokumentformate ohne vorherige Verarbeitung nicht lesbar sind.

Zurück zu Kopfzeilen. Der interessanteste für uns ist der letzte, Content-Length. Es teilt dem Browser mit, wie viele Datenbytes er nach der Leerzeile erwarten sollte, also ist es im Grunde genommen die in Bytes ausgedrückte Dokumentgröße. Dieser Header ist nicht obligatorisch und kann vom Server weggelassen werden. Manchmal kann die Dokumentgröße nicht vorhergesagt werden( zum Beispiel, wenn das Dokument im laufenden Betrieb erzeugt wird), manchmal sind es faule Programmierer, die es nicht enthalten( ziemlich häufig auf Treiber-Download-Sites), manchmal werden Websites von Neulingen erstellt, die es nicht wisseneines solchen Headers.

Wie auch immer, der Header kann fehlen. In diesem Fall weiß der Browser nicht, wie viele Daten der Server senden wird, und zeigt daher die Dokumentgröße als unbekannt an und wartet darauf, dass der Server die Verbindung schließt. Und das ist der Grund für unbekannte Dokumentgrößen.

Haben Sie etwas zur Erklärung hinzuzufügen? Ton in den Kommentaren ab. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange Benutzern lesen? Sehen Sie sich den vollständigen Diskussionsfaden hier an.