Hvorfor fejler min webbrowser undertiden ikke at vise resterende downloadtider?
Nogle gange kaster den trofaste downloadfremdriftsmåler på din browser (eller et andet program) bare hænderne i luften og giver op med at vise den resterende downloadtid. Hvorfor spiser det nogle gange den forventede downloadtid og undertiden undlader at rapportere det hele sammen?
Dagens Spørgsmål & Svar session kommer til os med venlig hilsen af SuperUser-en underafdeling af Stack Exchange, en community-driven gruppe af Q & A-websteder.
Spørgsmålet
SuperUser-læser Coldblackice vil vide, hvorfor hans browser ikke altid retter snavs:
Af og til, når du downloader en fil i en webbrowser, kender downloadprogressen ikke den samlede størrelse af filen, eller hvor langt i download den er - det viser bare den hastighed, hvormed den downloades, med en total som "ukendt".
Hvorfor ville browseren ikke vide den endelige størrelse af nogle filer? Hvor får den denne information i første omgang?
Hvor rigtigt?
Svarene
SuperUser bidragyder Gronostaj tilbyder følgende indsigt:
For at anmode om dokumenter fra webservere bruger browsere HTTP-protokollen. Du kan muligvis kende det navn fra din adresselinje (det kan være skjult nu, men når du klikker på adresselinjen, skal du kopiere URL'en og indsætte den i en teksteditor, du vil se
http: //
i begyndelsen). Det er en simpel tekstbaseret protokol, og det virker som dette:For det første forbinder din browser med hjemmesidenes server og sender en URL til det dokument, den vil downloade (websider er også dokumenter) og nogle detaljer om selve browseren (User-Agent osv.). For eksempel at indlæse hovedsiden på SuperUser-webstedet,
http://superuser.com/
, min browser sender en forespørgsel, der ser sådan ud:GET / HTTP / 1.1 Host: superuser.com Forbindelse: hold-live Accept: tekst / html, applikation / xhtml + xml, applikation / xml; q = 0,9, * / *; q = 0,8 Bruger-agent: Mozilla / 5.0 Windows NT 6.1; WOW64) Accept-Encoding: gzip, deflate, sdch Accept-Sprog: pl-PL, pl; q = 0,8, en-US; q = 0,6, en; q = 0,4 Cookie: [fjernet for sikkerhed] DNT : 1 If-Modified-Since: Tue, 09 Jul 2013 07:14:17 GMT
Den første linje angiver hvilket dokument serveren skal returnere. De andre linjer hedder overskrifter; de ser sådan ud:
Overskriftsnavn: Overskriftsværdi
Disse linjer sender yderligere oplysninger, som hjælper serveren med at beslutte, hvad de skal gøre.
Hvis alt er godt, svarer serveren ved at sende det ønskede dokument. Svaret starter med en statusmeddelelse efterfulgt af nogle overskrifter (med detaljer om dokumentet) og endelig, hvis alt er godt, dokumentets indhold. Sådan ser SuperUser-serverens svar på min anmodning ud:
HTTP / 1.1 200 OK Cache-Control: offentlig, max-alder = 60 Content-Type: text / html; charset = utf-8 Udløber: Tir, 09 Jul 2013 07:27:20 GMT Senest ændret: Tir, 09 Jul 2013 07:26:20 GMT Varig: * X-Frame-Valg: SAMMENLIGNNING Dato: Tir, 09 Jul 2013 07:26:19 GMT Indholdslængde: 139672 [... snip ...]
Efter den sidste linje lukker SuperUser's server forbindelsen.
Den første linje (
HTTP / 1.1 200 OK
) indeholder svarkoden, i dette tilfælde er det200 OK
. Det betyder, at serveren vil returnere et dokument, som ønsket. Når serveren ikke klarer det, bliver koden noget andet: du har sikkert set404 Ikke fundet
, og403 forbudt
er også ganske almindelig. Så følger overskrifterne.Når browseren finder en tom linje i svaret, ved den, at alt forbi den linje er indholdet af det dokument, der blev anmodet om. Så i dette tilfælde
er den første linje i SuperUser's hjemmeside kode. Hvis jeg anmodede om et dokument til download, ville det nok være nogle gibberish tegn, fordi de fleste dokumentformater er ulæselige uden forudgående behandling.
Tilbage til overskrifter. Den mest interessante en for os er den sidste,
Content-Length
. Det informerer browseren om, hvor mange byte data der skal forventes efter den tomme linje, så dybest set er det dokumentstørrelsen udtrykt i byte. Denne overskrift er ikke obligatorisk og kan udelades af serveren. Nogle gange kan dokumentstørrelsen ikke forudsiges (for eksempel når dokumentet genereres i flyve), nogle gange er dovne programmører ikke inkluderet det (ret almindelig på driver download sites), nogle gange oprettes websites af nybegyndere, som ikke ved af en sådan overskrift.Uanset hvad årsagen er, kan overskriften mangle. I så fald ved browseren ikke, hvor meget data serveren skal sende, og viser således dokumentstørrelsen som ukendt, venter på, at serveren lukker forbindelsen. Og det er årsagen til ukendte dokumentstørrelser.
Har du noget at tilføje til forklaringen? Lyde af i kommentarerne. Vil du læse flere svar fra andre tech-savvy Stack Exchange brugere? Tjek den fulde diskussionstråd her.