14Sep
Někdy věrný měřič pokroku stahování v prohlížeči( nebo jiné aplikaci) právě vrhá ruce do vzduchu a vzdává zobrazování zbývajícího času stahování.Proč se někdy načte předpokládaný čas stahování a někdy to nehlásí dohromady?
dnešní otázka &Odpověď na zasedání se k nám dostala s laskavým svolením SuperUser - podřízenou výměnou Stack Exchange, skupině webů Q & A založených na komunitě.
Otázka
čtečka SuperUser Coldblackice chce vědět, proč jeho prohlížeč není vždy špinavý nečistoty:
Občas při stahování souboru ve webovém prohlížeči, stahování nedokáže "vědět" o celkové velikosti souboru, nebojak daleko ve stahování to je - to jen ukazuje rychlost, s jakou je stahování, s celkem jako "Neznámý".
Proč by prohlížeč nepoznal konečnou velikost některých souborů?Kde získává tato informace v první řadě?
Kde skutečně?
Asistent odpovědí
SuperUser Gronostaj nabízí následující informace:
Chcete-li požádat o dokumenty z webových serverů, prohlížeče používají protokol HTTP.Tento název můžete znát z adresního řádku( může být nyní skryt, ale když kliknete na panel s adresou, zkopírujete adresu URL a vložíte ji do některého textového editoru, uvidíte na začátku http: //).Jedná se o jednoduchý textový protokol a funguje takto:
Nejprve se váš prohlížeč připojí k serveru a odesílá adresu URL dokumentu, který chce stáhnout( také webové stránky jsou dokumenty) a některé podrobnosti o samotném prohlížeči( Uživatel-Agent atd.).Například pro načtení hlavní stránky na webu SuperUser, http: //superuser.com/, můj prohlížeč pošle požadavek, který vypadá takto:
GET / HTTP / 1.1 Host: superuser.com Připojení: keep-alive Přijmout: text / html, aplikace/xhtml+xml,application/xml;q=0.9,****q=0.8 User-Agent: Mozilla / 5.0( Windows NT 6.1; WOW64) Accept-Encoding: gzip, deflate, sdch, q = 0,8, en-US, q = 0,6, en; q = 0,4 Cookie: [odstraněno z důvodu bezpečnosti] DNT: 1 If-Modified-Tue, 09 Jul 2013 07:14:17 GMTline určuje, který dokument má server vrátit. Ostatní řádky se nazývají hlavičky;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 bude reagovat odesláním požadovaného dokumentu. Odpověď se spustí se zprávou o stavu, následovanou několika záhlavími( s podrobnostmi o dokumentu) a nakonec, pokud je vše v pořádku, obsah dokumentu. Odpověď serveru SuperUser vypadá takto:
HTTP / 1.1 200 OK Cache-Control: public, max-age = 60 Typ obsahu: text / html;charset = utf-8 Vyprší: Út, 09 Jul 2013 07:27:20 GMT Poslední změna: Tue, 09 Jul 2013 07:26:20 GMT Vary: * X-Frame-Options: SAMEORIGIN Datum:07:26:19 GMT Content-Length: 139672 & lt;! DOCTYPE html & gt;& lt; html & gt;[... snip. ..] & lt; / html & gt;Po posledním řádku server SuperUser ukončí připojení.
První řádek( HTTP / 1.1 200 OK) obsahuje kód odpovědi, v tomto případě je 200 OK.To znamená, že server vrátí požadovaný dokument. Pokud server nedokáže tak učinit, kód bude něco jiného: asi jste viděli 404 Nenalezeno a 403 Zakázáno je také docela obvyklé.Pak následují hlavičky.
Když prohlížeč v odpovědi nalezne prázdný řádek, ví, že všechno kolem tohoto řádku je obsahem požadovaného dokumentu. Takže v tomto případě & lt;! DOCTYPE html & gt;je první řádek kódu domovské stránky SuperUser. Pokud jsem požádal o stažení dokumentu, pravděpodobně by to byly nějaké bláznivé znaky, protože většina formátů dokumentů je bez předchozího zpracování nečitelná.
Zpět na záhlaví.Nejzajímavější pro nás je poslední, Content-Length. Informuje prohlížeč, kolik bajtů dat by mělo očekávat po prázdné lince, takže v podstatě je to velikost dokumentu vyjádřená v bajtech. Tato záhlaví není povinná a může být vynechána serverem. Někdy se velikost dokumentu nemůže předvídat( například když je dokument generován za běhu), někdy i líní programátoři jej nezahrnují( poměrně časté na stránkách pro stahování ovladačů), někdy jsou webové stránky vytvořeny nováčci, kteří nevědítakového záhlaví.
Každopádně, ať je jakýkoliv důvod, hlavička může chybět. V takovém případě prohlížeč neví, kolik dat bude server odesílat, a proto zobrazí velikost dokumentu neznámé a čeká na ukončení připojení serveru. A to je důvod neznámé velikosti dokumentů.
Musíte něco přidat k vysvětlení?Vypadněte v komentářích. Chcete se dozvědět více odpovědí od ostatních uživatelů technologie Stack Exchange? Podívejte se na celý diskusní příspěvek zde.