Nogle gange kaster den trofaste download-fremskridtsmåler i din browser (eller anden applikation) bare hænderne i luften og giver op med at vise den resterende downloadtid. Hvorfor sømmer det undertiden den forventede downloadtid og undertiden undlader at rapportere det hele sammen?
Dagens spørgsmål og svar-session kommer til os med tilladelse fra SuperUser - en underinddeling 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 opvasker snavs:
Lejlighedsvis, når der downloades en fil i en webbrowser, ”kender” downloadens status ikke den samlede størrelse af filen, eller hvor langt i download den er - den viser bare den hastighed, hvormed den downloades, med en total som “Ukendt”.
Hvorfor ville browseren ikke kende den endelige størrelse for nogle filer? Hvor får den disse oplysninger i første omgang?
Hvor faktisk?
Svarene
SuperUser-bidragyder Gronostaj tilbyder følgende indsigt:
For at anmode om dokumenter fra webservere bruger browsere HTTP-protokollen. Du kender muligvis dette navn fra din adresselinje (det kan være skjult nu, men når du klikker på adresselinjen, kopierer du URL'en og indsætter den i en eller anden teksteditor, ser du
http: //i begyndelsen). Det er en simpel tekstbaseret protokol, og den fungerer således:For det første opretter din browser forbindelse til webstedets server og sender en URL til det dokument, den vil downloade (websider er også dokumenter) og nogle detaljer om selve browseren ( Brugeragent etc). For eksempel for at indlæse hovedsiden på SuperUser-webstedet,
http://superuser.com/, min browser sender en anmodning, der ser sådan ud:GET / HTTP / 1.1 Vært: superuser.com Forbindelse: hold i live Accepter: tekst / html, applikation / xhtml + xml, applikation / xml; q = 0,9, * / *; q = 0,8 Brugeragent: Mozilla / 5.0 (Windows NT 6.1; WOW64) Accept-kodning: gzip, deflate, sdch Accept-sprog: pl-PL, pl; q = 0,8, en-US; q = 0,6, en; q = 0,4 Cookie: [removed for security] DNT: 1 Hvis-ændret-siden: Tirsdag, 9. juli 2013 07:14:17 GMTDen første linje specificerer hvilket dokument serveren skal returnere. De andre linjer kaldes overskrifter; de ser sådan ud:
Overskriftsnavn: OverskriftsværdiDisse linjer sender yderligere oplysninger, der hjælper serveren med at beslutte, hvad han skal gøre.
Hvis alt er i orden, svarer serveren ved at sende det ønskede dokument. Svaret starter med en statusmeddelelse efterfulgt af nogle overskrifter (med detaljer om dokumentet) og til sidst, hvis alt er i orden, dokumentets indhold. Sådan ser SuperUser-serverens svar på min anmodning ud:
HTTP / 1.1 200 OK Cache-kontrol: offentlig, max-alder = 60 Indholdstype: tekst / html; charset = utf-8 Udløber: Tir, 9. juli 2013 07:27:20 GMT Sidst ændret: Tirsdag, 9. juli 2013 07:26:20 GMT Varier: * X-Frame-indstillinger: SAMEORIGIN Dato: Tirsdag, 9. juli 2013 07:26:19 GMT Indholdslængde: 139672 <! DOCTYPE html> <html> [...snip...] </html>Efter den sidste linje lukker SuperUser's server forbindelsen.
Den første linje (
HTTP / 1.1 200 OK) indeholder svarkode , i dette tilfælde er det200 OK. Det betyder, at serveren returnerer et dokument som ønsket. Når serveren ikke formår at gøre det, vil koden være noget andet: du har sandsynligvis set404 Ikke fundetog403 forbudter også ret almindeligt. Derefter følger overskrifterne.Når browseren finder en tom linje i svaret, ved den, at alt forbi denne linje er indholdet af det dokument, den anmodede om. Så i dette tilfælde
<! DOCTYPE html>er den første linje i SuperUser's hjemmekode. Hvis jeg anmodede om, at et dokument skulle downloades, ville det sandsynligvis være nogle gibberish tegn, fordi de fleste dokumentformater er ulæselige uden forudgående behandling.Tilbage til overskrifter. Den mest interessante for os er den sidste,
Indholdslængde. Den informerer browseren om, hvor mange byte data den kan forvente efter den tomme linje, så det er grundlæggende 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 farten), nogle gange inkluderer dovne programmerere det ikke (ret almindeligt på driverdownloadsider), nogle gange oprettes websteder af nybegyndere, der ikke kender af en sådan header.Uanset hvad uanset årsagen er, kan overskriften mangle. I så fald ved browseren ikke, hvor meget data serveren vil sende, og viser således dokumentstørrelsen som ukendt , venter på, at serveren lukker forbindelsen. Og det er grunden til ukendte dokumentstørrelser.