Skip to main content

Prečo môj webový prehliadač niekedy nezobrazí zostávajúce časy preberania?

Prečo môj webový prehliadač niekedy nezobrazí zostávajúce časy preberania?

Geoffrey Carr

Niekedy verný meter na stiahnutie na vašom prehliadači (alebo inej aplikácii) práve vrhá ruky do vzduchu a vzdáva zobrazenia zostávajúceho času na sťahovanie. Prečo niekedy niekedy načúva predpokladaný čas na sťahovanie a niekedy sa to nepodarí oznámiť všetko dohromady?

Dnešná relácia otázok a odpovedí sa k nám pridelí zdvorilosťou SuperUser - podskupiny Stack Exchange, skupín webových stránok týkajúcich sa otázok a odpovedí.

Otázka

Čítačka SuperUser Coldblackice chce vedieť, prečo jeho prehliadač nie vždy misie špiny:

Occasionally, when downloading a file in a web browser, the download progress doesn’t “know” the total size of the file, or how far along in the download it is — it just shows the speed at which it’s downloading, with a total as “Unknown”.

Why wouldn’t the browser know the final size of some files? Where does it get this information in the first place?

Kde naozaj?

Odpovede

Dodávateľ služby SuperUser Gronostaj ponúka tento pohľad:

To request documents from web servers, browsers use the HTTP protocol. You may know that name from your address bar (it may be hidden now, but when you click the address bar, copy the URL and paste it in some text editor, you’ll see http:// na začiatku). Je to jednoduchý textový protokol a funguje takto:

Po prvé, váš prehliadač sa pripája na server webových stránok a odošle adresu URL dokumentu, ktorý chce stiahnuť (webové stránky sú aj dokumenty) a niektoré podrobnosti o samotnom prehliadači (User-Agent atď.). Napríklad na načítanie hlavnej stránky na serveri SuperUser,http://superuser.com/, môj prehliadač pošle požiadavku, ktorá vyzerá takto:

GET / HTTP/1.1 Host: superuser.com Connection: keep-alive Accept: text/html,application/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 Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4 Cookie: [removed for security] DNT: 1 If-Modified-Since: Tue, 09 Jul 2013 07:14:17 GMT

Prvý riadok určuje, ktorý dokument by mal server vrátiť. Ostatné riadky sa nazývajú hlavičky; vyzerajú takto:

Header name: Header value

Tieto riadky posielajú ďalšie informácie, ktoré pomáhajú serveru rozhodnúť, čo má robiť.

Ak je všetko v poriadku, server odpovie zaslaním požadovaného dokumentu. Odpoveď začína hlásením o stave, nasleduje niekoľko hlavičiek (s podrobnosťami o dokumente) a nakoniec, ak je všetko v poriadku, obsah dokumentu. Odpoveď servera SuperUser na moju žiadosť vyzerá takto:

HTTP/1.1 200 OK Cache-Control: public, max-age=60 Content-Type: text/html; charset=utf-8 Expires: Tue, 09 Jul 2013 07:27:20 GMT Last-Modified: Tue, 09 Jul 2013 07:26:20 GMT Vary: * X-Frame-Options: SAMEORIGIN Date: Tue, 09 Jul 2013 07:26:19 GMT Content-Length: 139672 [...snip...]

Po poslednom riadku server SuperUser zavrie pripojenie.

Prvý riadok (HTTP/1.1 200 OK) obsahuje kód odpovede, v tomto prípade je to200 OK, To znamená, že server vráti požadovaný dokument. Keď server nedokáže tak urobiť, kód bude niečo iné: pravdepodobne ste to videli404 Not Found, a403 Forbidden je dosť bežné. Potom nasledujú hlavičky.

Keď prehliadač nájde v odpovedi prázdny riadok, vie, že všetko okolo tohto riadku je obsahom požadovaného dokumentu. Takže v tomto prípade je prvý riadok kódu domovskej stránky SuperUser. Ak by som žiadal o stiahnutie dokumentu, pravdepodobne by to boli nejaké bláznivé znaky, pretože väčšina formátov dokumentov je bez predchádzajúceho spracovania nečitateľná.

Späť na záhlavie. Najzaujímavejšia pre nás je posledná,Content-Length, Informuje prehliadač, koľko bajtov údajov by malo očakávať po prázdnom riadku, takže v podstate je to veľkosť dokumentu vyjadrená v bajtoch. Táto hlavička nie je povinná a server ju môže vynechať. Niekedy sa veľkosť dokumentu nedá predvídať (napríklad keď sa dokument generuje v pohybe), niekedy leniví programátori ho nezahŕňajú (dosť časté na stránkach sťahovania ovládačov), niekedy sú webové stránky vytvorené nováčikmi, ktorí nevedia takej hlavičky.

Každopádne, nech je akýkoľvek dôvod, hlavička môže chýbať. V takom prípade prehliadač nevie, koľko údajov bude server odosielať, a tak zobrazí veľkosť dokumentu akonevedno, čaká na server k ukončeniu pripojenia. A to je dôvod pre neznáme veľkosti dokumentov.


Máte niečo doplniť vysvetlenie? Zvuk vypnúť v komentároch. Chcete si prečítať viac odpovedí od iných používateľov technológie Stack Exchange? Pozrite sa na celý diskusný príspevok tu.

Link
Plus
Send
Send
Pin