Někdy věrný měřič průběhu stahování ve vašem prohlížeči (nebo jiné aplikaci) jen hodí ruce do vzduchu a vzdá se zobrazení zbývající doby stahování. Proč někdy naráží na předpokládanou dobu stahování a někdy to nedokáže nahlásit společně?
Dnešní relace Otázky a odpovědi k nám přichází s laskavým svolením SuperUser - členění Stack Exchange, komunitního seskupení webů otázek a odpovědí.
Otázka
Čtenář SuperUser Coldblackice chce vědět, proč jeho prohlížeč ne vždy umí špínu:
Při stahování souboru ve webovém prohlížeči občas průběh stahování „nezná“ celkovou velikost souboru ani to, jak daleko je ve stahování - zobrazuje pouze rychlost stahování, s celkovou jako „Neznámý“.
Proč prohlížeč nezná konečnou velikost některých souborů? Odkud tyto informace získává?
Kde vlastně?
Odpovědi
Přispěvatel SuperUser Gronostaj nabízí následující přehled:
K vyžádání dokumentů z webových serverů používají prohlížeče protokol HTTP. Toto jméno možná znáte z adresního řádku (nyní může být skrytý, ale když kliknete na adresní řádek, zkopírujete adresu URL a vložíte ji do nějakého textového editoru, uvidíte
http: //na začátku). Je to jednoduchý textový protokol a funguje takto:Nejprve se váš prohlížeč připojí k serveru webové stránky a odešle adresu URL dokumentu, který chce stáhnout (webové stránky jsou také dokumenty), a několik podrobností o samotném prohlížeči ( Uživatel-agent atd). Chcete-li například načíst hlavní stránku na webu SuperUser,
http://superuser.com/, můj prohlížeč odešle požadavek, který vypadá takto:GET / HTTP / 1.1 Hostitel: superuser.com Připojení: keep-alive Přijmout: text / html, aplikace / xhtml + xml, aplikace / xml; q = 0,9, * / *; q = 0,8 Uživatelský agent: Mozilla / 5.0 (Windows NT 6.1; WOW64) Accept-Encoding: gzip, deflate, sdch Přijmout jazyk: pl-PL, pl; q = 0,8, en-US; q = 0,6, en; q = 0,4 Cookie: [removed for security] DNT: 1 If-Modified-since: Út, 9. července 2013 07:14:17 GMTPrvní řádek určuje, který dokument má server vrátit. Ostatní řádky se nazývají záhlaví; vypadají takto:
Název záhlaví: hodnota záhlavíTyto řádky odesílají další informace, které pomáhají serveru rozhodnout, co má dělat.
Pokud je vše v pořádku, server odpoví odesláním požadovaného dokumentu. Odpověď začíná stavovou zprávou, následuje několik záhlaví (s podrobnostmi o dokumentu) a nakonec, pokud je vše v pořádku, obsah dokumentu. Takto vypadá odpověď serveru SuperUser na můj požadavek:
HTTP / 1,1 200 OK Cache-Control: public, max-age = 60 Typ obsahu: text / html; charset = utf-8 Platnost vyprší: Út, 9. července 2013 07:27:20 GMT Poslední úprava: Út, 9. července 2013 07:26:20 GMT Lišit se: * Možnosti X-Frame: SAMEORIGIN Datum: Úterý, 9. července 2013 07:26:19 GMT Délka obsahu: 139672 <! DOCTYPE html> <html> [...snip...] </html>Po posledním řádku server SuperUser uzavře připojení.
První řádek (
HTTP / 1,1 200 OK) obsahuje kód odpovědi , v tomto případě ano200 OK. To znamená, že server podle potřeby vrátí dokument. Když to server nezvládne, kód bude něco jiného: pravděpodobně jste už viděli404 nenalezeno, a403 Přístup odepřenje také docela běžné. Poté následují záhlaví.Když prohlížeč v odpovědi najde prázdný řádek, ví, že vše kolem tohoto řádku je obsah dokumentu, který požadoval. Takže v tomto případě
<! DOCTYPE html>je první řádek kódu domovské stránky SuperUser. Kdybych požadoval stažení dokumentu, pravděpodobně by to byly nějaké bláznivé znaky, protože většina formátů dokumentů je nečitelných bez předchozího zpracování.Zpět na záhlaví. Nejzajímavější pro nás je poslední,
Délka obsahu. Informuje prohlížeč, kolik bajtů dat by měl očekávat po prázdném řádku, takže v zásadě jde o velikost dokumentu vyjádřenou v bajtech. Tato hlavička není povinná a server ji může vynechat. Někdy nelze předvídat velikost dokumentu (například když je dokument generován za běhu), někdy ji líní programátoři nezahrnují (zcela běžné na stránkách pro stahování ovladačů), někdy weby vytvářejí nováčci, kteří to neznají takové hlavičky.Ať už je důvod jakýkoli, hlavička může chybět. V takovém případě prohlížeč neví, kolik dat server odešle, a zobrazí tak velikost dokumentu jako neznámý , čeká na ukončení připojení serverem. A to je důvod neznámých velikostí dokumentů.