Prečo môj webový prehliadač niekedy nezobrazí zostávajúce časy preberania?
Niekedy verný meter na stiahnutie prehliadača vo vašom prehliadači (alebo inej aplikácii) práve hodí ruky do vzduchu a vzdáva zobrazenia zostávajúceho času na sťahovanie. Prečo sa niekedy načúva predpokladaný čas sťahovania 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, zoskupenia webových stránok typu Q & A.
Otázka
Čítačka SuperUser Coldblackice chce vedieť, prečo jeho prehliadač nie je vždy špinavý:
Občas pri sťahovaní súboru vo webovom prehliadači postup pri sťahovaní nevie "celú veľkosť súboru, alebo ako ďaleko v preberaní je - to len ukazuje rýchlosť, s ktorou sa sťahuje, s celkovým ako "neznáme".
Prečo by prehliadač nepoznal konečnú veľkosť niektorých súborov? Kde získava tieto informácie na prvom mieste?
Kde naozaj?
Odpovede
Dodávateľ služby SuperUser Gronostaj ponúka tento pohľad:
Na vyžiadanie dokumentov z webových serverov používajú prehliadače protokol HTTP. Tento názov môžete zadať z panela s adresou (môže to byť teraz skryté, ale keď kliknete na panel s adresou, skopírujte adresu URL a prilepte ju do niektorého textového editora, uvidíte
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 Hostiteľ: superuser.com Pripojenie: Keep-alive Prijať: text / html, application / xhtml + xml, application / xml; Windows NT 6.1, WOW64) Akceptovať kódovanie: gzip, deflate, sdch Akceptovať jazyk: pl-PL, pl = q, 0.8; : 1 If-Modified-Od: Tue, 09 Jul 2013 07:14:17 GMT
Prvý riadok určuje, ktorý dokument má server vrátiť. Ostatné riadky sa nazývajú hlavičky; vyzerajú takto:
Názov záhlavia: hodnota záhlavia
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, nasledujú niektoré hlavičky (s podrobnosťami o dokumente) a nakoniec, ak je všetko dobré, obsah dokumentu. Toto je odpoveď servera SuperUser na moju požiadavku:
HTTP / 1.1 200 OK Cache-Control: verejné, max-age = 60 Content-type: text / html; charset = utf-8 Platnosť: Tue, 09 Jul 2013 07:27:20 GMT Posledná zmena: Tue, 09 Jul 2013 07:26:20 GMT Vary: * X-Frame-Options: SAMEORIGIN Dátum: 07:26:19 GMT Obsah-Dĺžka: 139672 [... snip ...]
Po poslednom riadku server SuperUser zatvorí pripojenie.
Prvý riadok (
HTTP / 1.1 200 OK
) obsahuje kód odpovede, v tomto prípade je to200 OK
. Znamená to, že server vráti požadovaný dokument. Ak sa serverovi to nepodarí, kód bude niečo iné: pravdepodobne ste to videli404 nenájdené
, a403 zakázané
je celkom 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 nečitateľná bez predchádzajúceho spracovania.
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ď je dokument vygenerovaný za hovädzieho dobytka), niekedy leniví programátori ho nezahŕňajú (dosť časté na stránkach sťahovania ovládačov), niekedy sú webové stránky vytvorené začiatočníkmi, 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 ako nevedno, čaká na ukončenie pripojenia servera. A to je dôvod pre neznáme veľkosti dokumentov.
Máte niečo doplniť vysvetlenie? Vyjadrite sa v komentároch. Chcete sa dozvedieť viac odpovedí od iných používateľov technickej úrovne Stack Exchange? Pozrite sa na celý diskusný príspevok tu.