Защо ми понякога уеб браузър не показва оставащите време за изтегляне?

Съдържание:

Защо ми понякога уеб браузър не показва оставащите време за изтегляне?
Защо ми понякога уеб браузър не показва оставащите време за изтегляне?

Видео: Защо ми понякога уеб браузър не показва оставащите време за изтегляне?

Видео: Защо ми понякога уеб браузър не показва оставащите време за изтегляне?
Видео: Полное руководство по Google Forms - универсальный инструмент для опросов и сбора данных онлайн! - YouTube 2024, Април
Anonim
Понякога верният измервател на прогреса при изтегляне на браузъра (или друго приложение) просто хвърля ръцете си във въздуха и се отказва от показването на оставащото време за изтегляне. Защо понякога се натрупва планираното време за изтегляне и понякога не се съобщава всичко заедно?
Понякога верният измервател на прогреса при изтегляне на браузъра (или друго приложение) просто хвърля ръцете си във въздуха и се отказва от показването на оставащото време за изтегляне. Защо понякога се натрупва планираното време за изтегляне и понякога не се съобщава всичко заедно?

Днешната сесия за въпроси и отговори ни идва с любезното съдействие на SuperUser - подразделение на Stack Exchange - обединяване на уеб сайтове с въпроси и отговори.

Въпроса

Reader на SuperUser Coldblackice иска да разбере защо браузърът му не винаги измива мръсотията:

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?

Къде наистина?

Отговорите

Сътрудникът на SuperUser Gronostaj предлага следната представа:

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

https://

в началото). Това е прост текстов протокол и работи по следния начин:

Първо, браузърът ви се свързва със сървъра на уебсайта и изпраща URL адрес на документа, който иска да изтегли (уеб страниците са документи), както и някои подробности за самия браузър (User-Agent и т.н.). Например, за да заредите основната страница в сайта на SuperUser,

https://superuser.com/

моят браузър изпраща заявка, която изглежда така:

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

Първият ред посочва кой документ да се върне на сървъра. Другите редове се наричат заглавки; те изглеждат така:

Header name: Header value

Тези редове изпращат допълнителна информация, която помага на сървъра да реши какво да прави.

Ако всичко е наред, сървърът ще отговори, като изпрати искания документ. Отговорът започва със съобщение за състоянието, следвано от някои заглавки (с подробности за документа) и накрая, ако всичко е наред, съдържанието на документа. Ето как изглежда отговорът на сървъра на SuperUser за моето искане:

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…]

След последния ред сървърът на SuperUser затваря връзката.

Първият ред (

HTTP/1.1 200 OK

) съдържа кода на отговора, в този случай това е

200 OK

Това означава, че сървърът ще върне документ, както се изисква. Когато сървърът не успее да направи това, кодът ще бъде нещо друго - вероятно сте я виждали

404 Not Found

и

403 Forbidden

е доста обичайно. След това заглавията следват.

Когато браузърът открие празен ред в отговора, той знае, че всичко, минало по този ред, е съдържанието на документа, който е поискал. Така че в този случай

е първият ред от кода на началната страница на SuperUser. Ако исках документ, който да се изтегли, вероятно ще са някакви ненормални знаци, тъй като повечето формати на документи са нечетливи без предварителна обработка.

Обратно към заглавията. Най-интересното за нас е последното,

Content-Length

Тя информира браузъра колко байта данни трябва да очаква след празната линия, така че основно това е размерът на документа, изразен в байтове. Този хедър не е задължителен и може да бъде пропуснат от сървъра. Понякога размерът на документа не може да бъде предвиден (например, когато документът се генерира в движение), понякога мързеливите програмисти не го включват (доста често на сайтовете за изтегляне на драйвери), понякога уебсайтовете се създават от начинаещи, които не знаят на такова заглавие.

Както и да е, независимо от причината, заглавката може да липсва. В този случай браузърът не знае колко данни сървърът ще изпрати и по този начин показва размера на документа катонеизвестен, чакайки сървъра да затвори връзката. И това е причината за неизвестни размери на документи.

Имате ли нещо, което да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други потребители на Stack Exchange? Вижте цялата тема на дискусията тук.

Препоръчано: