14Sep
Ibland kastar den trovärdiga nedladdningshastighetsmätaren på din webbläsare( eller annan applikation) bara händerna i luften och ger upp den återstående nedladdningstiden. Varför spikar den ibland den projicerade nedladdningstiden och rapporterar ibland inte det hela?
Dagens fråga &Svarssession kommer till oss med tillstånd av SuperUser-en indelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.
Frågan
SuperUser-läsare Coldblackice vill veta varför hans webbläsare inte alltid smutsar smuts:
Ibland, när du hämtar en fil i en webbläsare, känner inte nedladdningsförloppet "den" till den totala storleken på filen, ellerHur långt längs nedladdningen är det - det visar bara hur snabbt det laddas ned, totalt totalt som "Okänt".
Varför skulle inte webbläsaren känna till den slutliga storleken på vissa filer? Var får den den här informationen i första hand?
Var i själva verket?
Svaren
SuperUser-bidragsgivaren Gronostaj erbjuder följande inblick:
För att begära dokument från webbservrar använder webbläsare HTTP-protokollet. Du kanske känner det namnet från adressfältet( det kan vara gömt nu, men när du klickar på adressfältet kopierar du URL-adressen och klistrar in den i en textredigerare, så ser du http: // i början).Det är ett enkelt textbaserat protokoll och det fungerar så här:
Först kopplar din webbläsare till webbplatsens server och skickar en URL till dokumentet som den vill ladda ner( webbsidor är också dokument) och några detaljer om webbläsaren själv( User-Agent etc).Till exempel, för att ladda huvudsidan på SuperUser-webbplatsen, http: //superuser.com/, skickar min webbläsare en förfrågan som ser ut så här:
GET / HTTP / 1.1 Host: superuser.com Anslutning: Keep-Alive Acceptera: text / html, ansökan/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Användaragent: Mozilla / 5.0( Windows NT 6.1; WOW64) Acceptera-kodning: gzip, deflate, sdch Acceptera språk: pl-PL, pl; q = 0,8, en-US; q = 0,6, en; q = 0,4 Kakor: [borttagen för säkerhet] DNT: 1 Om-Modifierad-Sedan: Tis, 09 Jul 2013 07:14:17 GMTDen förstarad anger vilket dokument servern ska returnera. De andra raderna heter headers;De ser så här ut:
Rubriknamn: RubrikvärdeDessa rader skickar ytterligare information som hjälper servern att bestämma vad man ska göra.
Om allt är bra svarar servern genom att skicka det begärda dokumentet. Svaret börjar med ett statusmeddelande, följt av några rubriker( med detaljer om dokumentet) och slutligen, om allt är bra, dokumentets innehåll. Så här ser SuperUser-serverns svar på min begäran ut:
HTTP / 1.1 200 OK Cache-Control: allmän, max-age = 60 Innehållstyp: text / html;charset = utf-8 Utgår: tis, 09 jul 2013 07:27:20 GMT Senast ändrad: tis 09 jul 2013 07:26:20 GMT Variera: * X-Frame-Options: Samma Datum: tis 09 jul 201307:26:19 GMT Innehållslängd: 139672 & lt;! DOCTYPE html & gt;& Lt; html & gt;[... snip. ..] & lt; / html & gt;Efter den sista raden stänger SuperUser-servern anslutningen.
Den första raden( HTTP / 1.1 200 OK) innehåller svarskoden, i det här fallet är det 200 OK.Det betyder att servern kommer att returnera ett dokument, som begärts. När servern inte lyckas göra det, kommer koden att bli något annat: du har antagligen sett 404 inte hittad, och 403 förbjuden är också vanligt. Sedan följer rubrikerna.
När webbläsaren hittar en tom rad i svaret vet den att allt förbi den raden är innehållet i det dokument som begärts. Så i det här fallet & lt;! DOCTYPE html & gt;är den första raden i SuperUser hemsida kod. Om jag begärde att ett dokument skulle hämtas skulle det förmodligen vara några gibberiska tecken, eftersom de flesta dokumentformat är oläsliga utan förhandsbehandling.
Tillbaka till rubrikerna. Den mest intressanta för oss är den sista, innehållslängd. Den informerar webbläsaren om hur många byte data som ska förväntas efter den tomma linjen, så i grunden är det dokumentstorleken uttryckt i byte. Den här rubriken är inte obligatorisk och kan utelämnas av servern. Ibland kan dokumentstorleken inte förutsägas( till exempel när dokumentet genereras i flygningen), ibland kan lata programmerare inte inkludera det( ganska vanligt på drivrutinshämtningswebbplatser), ibland skapas webbplatser av nybörjare som inte vetav en sådan rubrik.
Hur som helst, oavsett orsak, kan huvudet saknas. I så fall vet webbläsaren inte hur mycket data servern ska skicka och visar sålunda dokumentstorleken som okänd och väntar på att servern ska stänga anslutningen. Och det är orsaken till okända dokumentstorlekar.
Har något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa mer svar från andra tech-savvy Stack Exchange-användare? Kolla in hela diskussionsgängan här.