Hvorfor mislykkes nettleseren min til å vise resterende nedlastingstider?
Noen ganger kaster den trofaste nedlastingshastighetsmåleren på nettleseren din (eller et annet program) bare hendene i luften og gir opp med å vise gjenværende nedlastingstid. Hvorfor spiser det noen ganger den projiserte nedlastningstiden, og noen ganger mislykkes det å rapportere alt sammen?
Dagens Spørsmål & Svar-sesjon kommer til oss med høflighet av SuperUser-en underavdeling av Stack Exchange, en fellesskapsdrevet gruppering av Q & A-nettsteder.
Spørsmålet
SuperUser leser Coldblackice vil vite hvorfor nettleseren sin ikke alltid smutter på smuss:
Av og til, når du laster ned en fil i en nettleser, vet ikke nedlastingsfremdriften den totale størrelsen på filen, eller hvor langt i nedlastingen den er - den viser bare hastigheten som den laster ned, med totalt som "ukjent".
Hvorfor ville ikke nettleseren vite den endelige størrelsen på noen filer? Hvor får den denne informasjonen i utgangspunktet?
Hvor faktisk?
Svarene
SuperUser-bidragsyter Gronostaj tilbyr følgende innsikt:
For å be om dokumenter fra webservere bruker nettleseren HTTP-protokollen. Du kan kanskje kjenne det navnet fra adresselinjen din (det kan være skjult nå, men når du klikker adresselinjen, kopierer du nettadressen og limer den inn i enkelte tekstredigeringsprogrammer, så ser du
http: //
i begynnelsen). Det er en enkel tekstbasert protokoll, og det fungerer slik:For det første kobler nettleseren til nettserverens server og sender en URL til dokumentet den vil laste ned (nettsider er også dokumenter) og noen detaljer om selve nettleseren (User-Agent etc). For eksempel, for å laste hovedsiden på SuperUser-siden,
http://superuser.com/
, nettleseren min sender en forespørsel som ser slik ut:GET / HTTP / 1.1 Host: superuser.com Tilkobling: Keep-Alive Godta: tekst / html, applikasjon / xhtml + xml, application / xml; q = 0,9, * / *; q = 0,8 Brukeragent: Mozilla / 5.0 Windows NT 6.1; WOW64) Accept-Encoding: gzip, deflate, sdch Godta-språk: pl-PL, pl; q = 0,8, en-US; q = 0,6, no; q = 0,4 Cookie: [fjernet for sikkerhet] DNT : 1 Hvis-Modifisert-Siden: Tir, 09 Jul 2013 07:14:17 GMT
Den første linjen angir hvilket dokument serveren skal returnere. De andre linjene heter overskrifter; de ser slik ut:
Overskriftnavn: Overskriftsverdi
Disse linjene sender ytterligere informasjon som hjelper serveren til å bestemme hva de skal gjøre.
Hvis alt er bra, svarer serveren ved å sende det forespurte dokumentet. Svaret starter med en statusmelding, etterfulgt av noen overskrifter (med detaljer om dokumentet) og til slutt, hvis alt er bra, dokumentets innhold. Slik ser SuperUser-serverens svar på forespørselen min ut:
HTTP / 1.1 200 OK Cache-kontroll: offentlig, maksimal alder = 60 Innholdstype: tekst / html; charset = utf-8 Utløper: Tir, 09 Jul 2013 07:27:20 GMT Senest endret: Tir, 09 Jul 2013 07:26:20 GMT Varig: * X-Frame-Valg: SAMMENLIGN Dato: Tir, 09 Jul 2013 07:26:19 GMT Innholdslengde: 139672 [... snip ...]
Etter den siste linjen lukker SuperUser-serveren forbindelsen.
Den første linjen (
HTTP / 1.1 200 OK
) inneholder svarskoden, i dette tilfellet er det200 OK
. Det betyr at serveren vil returnere et dokument, etterspurt. Når serveren ikke klarer å gjøre det, vil koden være noe annet: du har sikkert sett404 ikke funnet
, og403 Forbudt
er ganske vanlig også. Deretter følger overskriftene.Når nettleseren finner en tom linje i svaret, vet han at alt forbi den linjen er innholdet i dokumentet som det søkte om. Så i dette tilfellet
er den første linjen i SuperUser's hjemmeside kode. Hvis jeg ber om at et dokument skal lastes ned, vil det trolig være noen gibberish-tegn, fordi de fleste dokumentformater er ulæselige uten forbehandling.
Tilbake til overskrifter. Den mest interessante en for oss er den siste,
Content-Length
. Den informerer nettleseren om hvor mange bytes data det skal forvente etter den tomme linjen, så i utgangspunktet er dokumentstørrelsen uttrykt i byte. Denne overskriften er ikke obligatorisk og kan utelates av serveren. Noen ganger kan dokumentstørrelsen ikke forutsies (for eksempel når dokumentet genereres på fluen), noen ganger lat programmerer ikke med det (ganske vanlig på nedlasting av driveren), noen ganger er nettsteder opprettet av nybegynnere som ikke vet av en slik topptekst.Uansett, uansett årsaken er at overskriften kan mangle. I så fall vet nettleseren ikke hvor mye data serveren skal sende, og viser dermed dokumentstørrelsen som ukjent, venter på at serveren skal lukke tilkoblingen. Og det er årsaken til ukjente dokumentstørrelser.
Har du noe å legge til forklaringen? Lyde av i kommentarene. Vil du lese flere svar fra andre tech-savvy Stack Exchange-brukere? Sjekk ut hele diskusjonstråden her.