Warum kann mein Webbrowser manchmal die verbleibenden Downloadzeiten nicht anzeigen?
Manchmal zeigt der treue Download-Fortschrittsbalken in Ihrem Browser (oder einer anderen Anwendung) nur die Hände in die Luft und gibt die verbleibende Downloadzeit auf. Warum wird die geplante Download-Zeit manchmal genau festgelegt und manchmal nicht alles zusammen gemeldet?
Die heutige Question & Answer-Sitzung wird dank SuperUser zur Verfügung gestellt - einer Unterteilung von Stack Exchange, einer Community-basierten Gruppierung von Q & A-Websites.
Die Frage
SuperBenutzer-Leser Coldblackice möchte wissen, warum sein Browser nicht immer den Dreck aufwirbelt:
Beim Herunterladen einer Datei in einem Webbrowser „weiß“ der Download-Fortschritt gelegentlich nicht, wie groß die Gesamtgröße der Datei ist oder wie weit sie beim Download ist. Sie zeigt lediglich die Geschwindigkeit an, mit der der Download insgesamt durchgeführt wird als "Unbekannt".
Warum erkennt der Browser nicht die endgültige Größe einiger Dateien? Woher bekommt er diese Informationen überhaupt??
Wo in der Tat?
Die Antworten
Der SuperUser-Mitwirkende Gronostaj bietet folgende Einblicke:
Um Dokumente von Webservern anzufordern, verwenden Browser das HTTP-Protokoll. Sie kennen diesen Namen möglicherweise aus Ihrer Adressleiste (er kann jetzt ausgeblendet sein. Wenn Sie jedoch auf die Adressleiste klicken, kopieren Sie die URL und fügen Sie sie in einen Texteditor ein.)
http: //
am Anfang). Es ist ein einfaches textbasiertes Protokoll, das folgendermaßen funktioniert:Zunächst stellt Ihr Browser eine Verbindung zum Server der Website her und sendet eine URL des Dokuments, das er herunterladen möchte (auch Webseiten sind Dokumente) sowie einige Details zum Browser selbst (User-Agent usw.). Zum Beispiel, um die Hauptseite auf der SuperUser-Site zu laden,
http://superuser.com/
, Mein Browser sendet 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) Accept-Encoding: gzip, deflate, sdch Accept-Language: pl-PL, pl; q = 0,8, en-US; q = 0,6, de; q = 0,4 Cookie: [aus Sicherheitsgründen entfernt] DNT : 1 If-Modified-Since: Di, 09. Jul 2013 07:14:17 GMT
Die erste Zeile gibt an, welches Dokument der Server zurückgeben soll. Die anderen Zeilen werden als Header bezeichnet. Sie sehen so aus:
Headername: Header-Wert
Diese Zeilen senden zusätzliche Informationen, mit deren Hilfe der Server entscheiden kann, was zu tun ist.
Wenn alles in Ordnung ist, antwortet der Server, 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 Gültig bis: Di, 09 Jul 2013 07:27:20 GMT Zuletzt geändert: Di, 09 Jul 2013 07:26:20 GMT Vary: * X-Frame-Optionen: SAMEORIGIN Datum: Di, 09 Jul 2013 07:26:19 GMT Content-Length: 139672 [… snip…]
Nach der letzten Zeile schließt der Server von SuperUser die Verbindung.
Die erste Zeile (
HTTP / 1.1 200 OK
) enthält den Antwortcode, in diesem Fall ist es200 OK
. Dies bedeutet, dass der Server wie gewünscht ein Dokument zurückgibt. Wenn der Server dies nicht schafft, wird der Code etwas anderes sein: Sie haben wahrscheinlich gesehen404 Nicht gefunden
, und403 Verboten
ist auch ziemlich üblich. Dann folgen die Header.Wenn der Browser in der Antwort eine leere Zeile findet, weiß er, dass alles über diese Zeile hinaus den Inhalt des angeforderten Dokuments enthält. Also in diesem Fall
ist die erste Zeile des Homepage-Codes des SuperUser. Wenn ich ein Dokument zum Herunterladen anforderte, handelt es sich wahrscheinlich um ein Kauderwelsch, weil die meisten Dokumentformate ohne vorherige Verarbeitung nicht lesbar sind.
Zurück zu den Kopfzeilen. Das interessanteste für uns ist das letzte,
Inhaltslänge
. Sie informiert den Browser darüber, wie viele Datenbytes nach der leeren Zeile zu erwarten sind. Es handelt sich also im Wesentlichen um die Dokumentgröße in Byte. Dieser Header ist nicht obligatorisch und kann vom Server weggelassen werden. Manchmal kann die Größe des Dokuments nicht vorhergesagt werden (z. B. wenn das Dokument schnell generiert wird), manchmal wird es von faulen Programmierern nicht verwendet (auf Treiberdownloadseiten üblich), manchmal werden Websites von Neulingen erstellt, die dies nicht wissen von einem solchen Header.Was auch immer der Grund ist, der Header kann fehlen. In diesem Fall weiß der Browser nicht, wie viele Daten der Server senden soll, und zeigt daher die Dokumentgröße als an unbekannte, Warten darauf, dass der Server die Verbindung beendet. Und das ist der Grund für unbekannte Dokumentgrößen.
Haben Sie der Erklärung etwas hinzuzufügen? Ton aus in den Kommentaren. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange-Benutzern lesen? Hier geht es zum vollständigen Diskussionsthread.