Startpagina » hoe » Waarom geeft mijn webbrowser soms resterende downloadtijden niet weer?

    Waarom geeft mijn webbrowser soms resterende downloadtijden niet weer?

    Soms gooit de trouwe download-voortgangsmeter in je browser (of een andere applicatie) gewoon zijn handen in de lucht en geeft hij de resterende downloadtijd op. Waarom spijkert het soms de geprojecteerde downloadtijd op en rapporteert het soms niet allemaal tegelijk?

    De Question & Answer-sessie van vandaag komt tot ons dankzij SuperUser - een onderdeel van Stack Exchange, een gemeenschapsgedreven groep van Q & A-websites.

    De vraag

    SuperUser-lezer Coldblackice wil weten waarom zijn browser niet altijd voor het vuil zorgt:

    Af en toe, wanneer een bestand in een webbrowser wordt gedownload, "weet" de download de totale grootte van het bestand niet, of hoe ver de download duurt - het laat alleen de snelheid zien waarmee het downloadt, met een totaal als "onbekend".

    Waarom zou de browser de uiteindelijke grootte van sommige bestanden niet weten? Waar haalt het deze informatie in de eerste plaats vandaan??

    Waar inderdaad?

    De antwoorden

    SuperUser-bijdrager Gronostaj biedt het volgende inzicht:

    Voor het aanvragen van documenten van webservers gebruiken browsers het HTTP-protocol. Misschien kent u die naam van uw adresbalk (deze is mogelijk nu verborgen, maar als u op de adresbalk klikt, kopieert u de URL en plakt u deze in een teksteditor, dan ziet u http: // in het begin). Het is een eenvoudig op tekst gebaseerd protocol en het werkt als volgt:

    Eerst maakt uw browser verbinding met de server van de website en verzendt hij een URL van het document dat hij wil downloaden (webpagina's zijn ook documenten) en enkele details over de browser zelf (User-Agent, enz.). Bijvoorbeeld om de hoofdpagina op de SuperUser-site te laden, http://superuser.com/, mijn browser verzendt een verzoek dat er als volgt uitziet:

    GET / HTTP / 1.1 Host: superuser.com Verbinding: keep-alive Accepteer: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8 User-Agent: Mozilla / 5.0 ( Windows NT 6.1; WOW64) Accept-codering: gzip, deflate, sdch Accept-Taal: pl-PL, pl; q = 0.8, en-US; q = 0.6, en; q = 0.4 Cookie: [verwijderd voor beveiliging] DNT : 1 If-Modified-Since: Tue, 09 Jul 2013 07:14:17 GMT 

    De eerste regel geeft aan welk document de server moet retourneren. De andere regels worden kopteksten genoemd; ze zien er zo uit:

    Headernaam: Header-waarde 

    Deze regels verzenden aanvullende informatie die de server helpt te beslissen wat te doen.

    Als alles goed is, reageert de server door het gevraagde document te verzenden. Het antwoord begint met een statusbericht, gevolgd door een aantal kopteksten (met details over het document) en als laatste alles goed, de inhoud van het document. Dit is wat het antwoord van de SuperUser-server op mijn verzoek ziet:

    HTTP / 1.1 200 OK Cache-Control: public, max-age = 60 Inhoudstype: text / html; charset = utf-8 Verloopt: di, 09 jul 2013 07:27:20 GMT Laatst gewijzigd: di, 09 jul 2013 07:26:20 GMT variëren: * X-frame-opties: SAMEORIGIN Datum: di, 09 jul 2013 07:26:19 GMT Content-Length: 139672 [... knip ...]  

    Na de laatste regel sluit de server van SuperUser de verbinding.

    De eerste regel (HTTP / 1.1 200 OK) bevat de responscode, in dit geval is het 200 OK. Dit betekent dat de server een document retourneert, zoals gevraagd. Wanneer de server dit niet lukt, zal de code iets anders zijn: u hebt het waarschijnlijk gezien 404 Niet Gevonden, en 403 verboden is ook heel gewoon. Dan volgen de headers.

    Wanneer de browser een lege regel in het antwoord vindt, weet het dat alles voorbij die regel de inhoud is van het document waar het om heeft gevraagd. Dus in dit geval  is de eerste regel van de homepage van de SuperUser. Als ik een document zou vragen om te downloaden, zouden het waarschijnlijk een paar wartalen zijn, omdat de meeste documentindelingen onleesbaar zijn zonder voorafgaande verwerking.

    Terug naar headers. De meest interessante is voor ons de laatste, Inhoud lengte. Het informeert de browser hoeveel bytes aan gegevens het na de lege regel zou moeten verwachten, dus eigenlijk is het de documentgrootte uitgedrukt in bytes. Deze header is niet verplicht en kan door de server worden weggelaten. Soms kan de documentgrootte niet worden voorspeld (bijvoorbeeld wanneer het document on the fly wordt gegenereerd), soms bevatten luie programmeurs dit niet (vrij vaak op downloadsites van stuurprogramma's), soms worden websites gemaakt door nieuwkomers die niet weten van een dergelijke header.

    Hoe dan ook, wat de reden ook is, de kop mag ontbreken. In dat geval weet de browser niet hoeveel gegevens de server gaat verzenden en wordt dus de documentgrootte weergegeven als onbekend, wachtend op de server om de verbinding te sluiten. En dat is de reden voor onbekende documentgroottes.


    Heb je iets toe te voegen aan de uitleg? Geluid uit in de reacties. Wilt u meer antwoorden van andere technisch onderlegde Stack Exchange-gebruikers lezen? Bekijk hier de volledige discussiethread.