loader

Warum kann mein Webbrowser manchmal die verbleibenden Downloadzeiten nicht anzeigen?

Anonim

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 ist die geplante Download-Zeit manchmal genau richtig und manchmal wird nicht alles zusammen gemeldet?

Die heutige Question & Answer-Sitzung wird von 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, die URL kopieren und in einen Texteditor einfügen, wird // am Anfang angezeigt). 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.). Wenn Sie beispielsweise die Hauptseite auf der SuperUser-Website //superuser.com/, sendet mein Browser eine Anfrage, die wie //superuser.com/ aussieht:

 GET / HTTP/1.1 Host: superuser.com Connection: keep-alive Accept: 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, en;q=0.4 Cookie: [removed for security] DNT: 1 If-Modified-Since: Tue, 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:

 Header name: Header value 

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 Content-Type: text/html; charset=utf-8 Expires: Tue, 09 Jul 2013 07:27:20 GMT Last-Modified: Tue, 09 Jul 2013 07:26:20 GMT Vary: * X-Frame-Options: SAMEORIGIN Date: Tue, 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 es 200 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 404 Not Found und 403 Forbidden ist ebenfalls ü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. In diesem Fall steht also 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, Content-Length . 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 unbekannt an, sodass er darauf wartet, 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.

Tipp Der Redaktion