Hemsida » hur » Varför misslyckas min webbläsare ibland att visa kvarvarande nedladdningstider?

    Varför misslyckas min webbläsare ibland att visa kvarvarande nedladdningstider?

    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 ibland misslyckas med att anmäla det hela tillsammans?

    Dagens Question & Answer-session 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" den totala storleken på filen, eller hur långt i nedladdningen det är - det visar bara hur snabbt det laddas ner, med en total 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 faktiskt?

    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/, min webbläsare skickar en förfrågan som ser ut så här:

    GET / HTTP / 1.1 Host: superuser.com Anslutning: Keep-Alive Acceptera: text / html, application / 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 Kakao: [borttagen för säkerhet] DNT : 1 Om-Modifierad-Sedan: Tis, 09 Jul 2013 07:14:17 GMT 

    Den första raden anger vilket dokument servern ska returnera. De andra raderna heter headers; de ser så här ut:

    Rubriknamn: Rubrikvärde 

    Dessa 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 2013 07:26:19 GMT Innehållslängd: 139672 [... snip ...]  

    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 vara något annat: du har nog sett 404 Ej Hittad, och 403 förbjuden är ganska vanligt också. 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ärdes. Så i det här fallet  ä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öregående bearbetning.

    Tillbaka till rubrikerna. Den mest intressanta för oss är den sista, Content-Length. Det 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å nedladdningssidor för drivrutiner), ibland skapas webbplatser av nybörjare som inte vet av en sådan rubrik.

    Hur som helst, oavsett orsaken, kan huvudet saknas. I så fall vet inte webbläsaren hur mycket data servern ska skicka och visar sålunda dokumentstorleken som okänd, väntar på servern att stänga anslutningen. Och det är orsaken till okända dokumentstorlekar.


    Har du 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.