Manchmal wirft der treue Download-Fortschrittsmesser in Ihrem Browser (oder einer anderen Anwendung) einfach die Hände in die Luft und gibt die Anzeige der verbleibenden Downloadzeit auf. Warum wird manchmal die prognostizierte Downloadzeit erreicht und manchmal nicht alles zusammen gemeldet?
SuperUser-Leser Coldblackice will wissen, warum sein Browser nicht immer den Dreck aufräumt:
Um Dokumente von Webservern anzufordern, verwenden Browser das HTTP-Protokoll. Sie kennen diesen Namen vielleicht aus Ihrer Adressleiste (er ist jetzt möglicherweise ausgeblendet, aber wenn Sie auf die Adressleiste klicken, die URL kopieren und in einen Texteditor einfügen, sehen Sie http://
am Anfang). Es ist ein einfaches textbasiertes Protokoll und es funktioniert wie folgt:
Zuerst verbindet sich Ihr Browser mit dem Server der Website und sendet eine URL des herunterzuladenden Dokuments (auch Webseiten sind Dokumente) und einige Details zum Browser selbst (User-Agent etc). Um beispielsweise die Hauptseite der SuperUser-Site zu laden, http://superuser.com/
, sendet mein Browser eine Anfrage, die wie folgt 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 Header genannt; sie sehen so aus:
Header name: Header value
Diese Zeilen senden zusätzliche Informationen, die dem Server helfen, zu entscheiden, was zu tun ist.
Wenn alles in Ordnung ist, antwortet der Server mit dem Senden des angeforderten Dokuments. Die Antwort beginnt mit einer Statusmeldung, gefolgt von einigen Headern (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-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
<!DOCTYPE html>
<html>
[...snip...]
</html>
Nach der letzten Zeile schließt der Server von SuperUser die Verbindung.
Die erste Zeile (HTTP/1.1 200 OK
) enthält die Antwortcode, in diesem Fall ist es 200 OK
. Dies bedeutet, dass der Server wie angefordert ein Dokument zurückgibt. Wenn der Server dies nicht schafft, wird der Code etwas anderes sein: Sie haben es wahrscheinlich gesehen 404 Not Found
, und 403 Forbidden
ist auch recht verbreitet. Dann folgen die Überschriften.
Wenn der Browser eine leere Zeile in der Antwort findet, weiß er, dass alles nach dieser Zeile der Inhalt des angeforderten Dokuments ist. Also in diesem Fall <!DOCTYPE html>
ist die erste Zeile des Homepage-Codes des SuperUser. 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, Content-Length
. Es teilt dem Browser mit, wie viele Datenbytes er nach der Leerzeile erwarten soll, also im Grunde die Dokumentgröße in Bytes ausgedrückt. Dieser Header ist nicht obligatorisch und kann vom Server weggelassen werden. Manchmal kann die Dokumentgröße nicht vorhergesagt werden (z. B. wenn das Dokument im laufenden Betrieb erstellt wird), manchmal integrieren faule Programmierer es nicht (ziemlich häufig auf Treiber-Download-Sites), manchmal werden Websites von Neulingen erstellt, die es nicht wissen eines solchen Headers.
Wie auch immer, der Header kann fehlen, was auch immer der Grund ist. In diesem Fall weiß der Browser nicht, wie viele Daten der Server senden wird, und zeigt daher die Dokumentgröße als an, während er darauf wartet, dass der Server die Verbindung schließt. Und das ist der Grund für unbekannte Dokumentengrößen.
Möchten Sie der Erklärung noch etwas hinzufügen? Ton in den Kommentaren ab. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange-Benutzern lesen? Sehen Sie sich hier den vollständigen Diskussionsthread an.