Ibland kastar den trogna nedladdningsmätaren i din webbläsare (eller annan applikation) bara sina händer i luften och ger upp att visa återstående nedladdningstid. Varför spikar det ibland den beräknade nedladdningstiden och ibland misslyckas med att rapportera allt tillsammans?
Dagens Fråga & Svar-session kommer till oss med tillstånd av SuperUser - en underavdelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.
Frågan
SuperUser-läsaren Coldblackice vill veta varför hans webbläsare inte alltid torkar smuts:
Ibland, när du laddar ner en fil i en webbläsare, "vet" nedladdningsförloppet inte den totala storleken på filen, eller hur långt längs nedladdningen den är - den visar bara den hastighet som den laddas ner med totalt som ”Okänd”.
Varför skulle inte webbläsaren känna till den slutliga storleken på vissa filer? Var får den informationen i första hand?
Var verkligen?
Svaren
SuperUser-bidragsgivare Gronostaj erbjuder följande insikt:
För att begära dokument från webbservrar använder webbläsare HTTP-protokollet. Du kanske känner till det namnet från adressfältet (det kan vara dolt nu, men när du klickar på adressfältet, kopierar du webbadressen och klistrar in den i någon textredigerare, ser du
http: //i början). Det är ett enkelt textbaserat protokoll och det fungerar så här:Först ansluter din webbläsare till webbplatsens server och skickar en URL till det dokument som den vill ladda ner (webbsidor är också dokument) och några detaljer om själva webbläsaren ( User-Agent etc). Till exempel, för att ladda huvudsidan på SuperUser-webbplatsen,
http://superuser.com/skickar min webbläsare en begäran som ser ut så här:GET / HTTP / 1.1 Värd: superuser.com Anslutning: hålla vid liv Acceptera: text / html, applikation / xhtml + xml, applikation / xml; q = 0,9, * / *; q = 0,8 Användaragent: Mozilla / 5.0 (Windows NT 6.1; WOW64) Acceptera-kodning: gzip, tömma, sdch Acceptera språk: pl-PL, pl; q = 0,8, en-US; q = 0,6, en; q = 0,4 Cookie: [removed for security] DNT: 1 Om-modifierad-sedan: tis, 9 jul 2013 07:14:17 GMTDen första raden anger vilket dokument servern ska returnera. De andra raderna kallas rubriker; de ser ut så här:
Rubriknamn: RubrikvärdeDessa rader skickar ytterligare information som hjälper servern att bestämma vad den 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: offentlig, max-age = 60 Innehållstyp: text / html; charset = utf-8 Upphör att gälla: tis, 9 jul 2013 07:27:20 GMT Senast ändrad: Tis, 9 jul 2013 07:26:20 GMT Variera: * X-Frame-alternativ: SAMEORIGIN Datum: Tis, 9 jul 2013 07:26:19 GMT Innehållslängd: 139672 <! DOCTYPE html> <html> [...snip...] </html>Efter sista raden stänger SuperUser-servern anslutningen.
Den första raden (
HTTP / 1.1 200 OK) innehåller svarkod , i det här fallet är det200 OK. Det betyder att servern returnerar ett dokument, enligt begäran. När servern inte lyckas göra det kommer koden att vara något annat: du har förmodligen sett404 Ej Hittadoch403 Förbjudetär också ganska vanligt. Sedan följer rubrikerna.När webbläsaren hittar en tom rad i svaret vet den att allt efter den raden är innehållet i det dokument som den begärde. Så i det här fallet
<! DOCTYPE html>är den första raden i SuperUser: s startsida. Om jag begärde ett dokument att ladda ner skulle det antagligen vara några gibberish-tecken, eftersom de flesta dokumentformat är oläsliga utan föregående bearbetning.Tillbaka till rubriker. Den mest intressanta för oss är den sista,
Innehållslängd. Den informerar webbläsaren om hur många byte med data den kan förvänta sig efter den tomma raden, så i princip är det dokumentstorleken uttryckt i byte. Denna rubrik är inte obligatorisk och kan utelämnas av servern. Ibland kan dokumentstorleken inte förutsägas (till exempel när dokumentet genereras direkt), ibland inkluderar lata programmerare det inte (ganska vanligt på drivrutinsnedladdningssidor), ibland skapas webbplatser av nybörjare som inte vet av en sådan rubrik.Hur som helst, oavsett anledningen, rubriken kan saknas. I så fall vet webbläsaren inte hur mycket data servern ska skicka och visar därmed dokumentstorleken som okänd , väntar på att servern ska stänga anslutningen. Och det är anledningen till okända dokumentstorlekar.