Manchmal wirft die originalgetreue Download-Fortschrittsanzeige in Ihrem Browser (oder einer anderen Anwendung) einfach die Hände in die Luft und gibt die Anzeige der verbleibenden Download-Zeit auf. Warum wird manchmal die projizierte Downloadzeit verkürzt und manchmal wird nicht alles zusammen gemeldet?
Die heutige Frage-Antwort-Sitzung wird uns mit freundlicher Genehmigung von SuperUser zur Verfügung gestellt - einer Unterteilung von Stack Exchange, einer Community-gesteuerten Gruppierung von Q & A-Websites.
Die Frage
SuperUser-Leser Coldblackice möchte wissen, warum sein Browser den Schmutz nicht immer austeilt:
Wenn Sie eine Datei in einem Webbrowser herunterladen, kennt der Download-Fortschritt gelegentlich nicht die Gesamtgröße der Datei oder wie weit der Download fortgeschritten ist - er zeigt nur die Geschwindigkeit an, mit der sie heruntergeladen wird, mit einer Gesamtsumme als "Unbekannt".
Warum kennt der Browser die endgültige Größe einiger Dateien nicht? Woher bekommt es diese Informationen überhaupt?
Wo in der Tat?
Die Antworten
Der SuperUser-Mitarbeiter Gronostaj bietet folgende Einblicke:
Um Dokumente von Webservern anzufordern, verwenden Browser das HTTP-Protokoll. Möglicherweise kennen Sie diesen Namen aus Ihrer Adressleiste (er ist jetzt möglicherweise ausgeblendet. Wenn Sie jedoch auf die Adressleiste klicken, die URL kopieren und in einen Texteditor einfügen, wird dies angezeigt
http://am Anfang). Es ist ein einfaches textbasiertes Protokoll und funktioniert folgendermaßen:Zunächst stellt Ihr Browser eine Verbindung zum Server der Website her und sendet eine URL des Dokuments, das heruntergeladen werden soll (Webseiten sind ebenfalls Dokumente), sowie einige Details zum Browser selbst ( User-Agent etc). Um beispielsweise 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: am Leben bleiben Akzeptieren Sie: Text / HTML, Anwendung / xhtml + xml, Anwendung / xml; q = 0,9, * / *; q = 0,8 User-Agent: Mozilla / 5.0 (Windows NT 6.1; WOW64) Accept-Encoding: gzip, deflate, sdch Akzeptiersprache: pl-PL, pl; q = 0,8, en-US; q = 0,6, en; q = 0,4 Cookie: [removed for security] DNT: 1 If-Modified-Since: Di, 09 Jul 2013 07:14:17 GMTDie erste Zeile gibt an, welches Dokument der Server zurückgeben soll. Die anderen Zeilen werden als Überschriften bezeichnet. sie sehen so aus:
Headername: HeaderwertDiese Zeilen senden zusätzliche Informationen, die dem Server bei der Entscheidung helfen, was zu tun ist.
Wenn alles in Ordnung ist, sendet der Server das angeforderte Dokument. Die Antwort beginnt mit einer Statusmeldung, gefolgt von einigen Überschriften (mit Details zum Dokument) und schließlich, wenn alles in Ordnung ist, dem Inhalt des Dokuments. So sieht die Antwort des SuperUser-Servers auf meine Anfrage aus:
HTTP / 1.1 200 OK Cache-Kontrolle: öffentlich, maximales Alter = 60 Inhaltstyp: text / html; Zeichensatz = utf-8 Läuft ab: Di, 09 Jul 2013 07:27:20 GMT Letzte Änderung: Di, 09. Juli 2013, 07:26:20 Uhr GMT Variieren: * X-Frame-Optionen: SAMEORIGIN Datum: Di, 09. Juli 2013 07:26:19 GMT Inhaltslänge: 139672 <! DOCTYPE html> <html> [...snip...] </ html>Nach der letzten Zeile schließt der SuperUser-Server die Verbindung.
Die erste Zeile (
HTTP / 1.1 200 OK) enthält die Antwortcode in diesem Fall ist es200 OK. Dies bedeutet, dass der Server wie angefordert ein Dokument zurückgibt. Wenn der Server dies nicht schafft, ist der Code etwas anderes: Sie haben es wahrscheinlich gesehen404 Nicht gefunden, und403 Verbotenist auch ziemlich häufig. Dann folgen die Überschriften.Wenn der Browser in der Antwort eine leere Zeile findet, weiß er, dass alles, was über diese Zeile hinausgeht, der Inhalt des angeforderten Dokuments ist. Also in diesem Fall
<! DOCTYPE html>ist die erste Zeile des SuperUser-Homepage-Codes. Wenn ich ein Dokument zum Herunterladen anfordern würde, wären es wahrscheinlich einige Kauderwelschzeichen, da die meisten Dokumentformate ohne vorherige Verarbeitung nicht lesbar sind.Zurück zu den Überschriften. Das interessanteste für uns ist das letzte,
Inhaltslänge. Es informiert den Browser darüber, wie viele Datenbytes nach der Leerzeile erwartet werden sollen. Im Grunde genommen handelt es sich also um 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 erstellt wird), manchmal schließen faule Programmierer es nicht ein (häufig auf Treiber-Download-Sites), manchmal werden Websites von Neulingen erstellt, die es nicht wissen eines solchen Headers.Was auch immer der Grund sein mag, 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 an Unbekannt und wartet darauf, dass der Server die Verbindung schließt. Dies ist der Grund für unbekannte Dokumentgrößen.