Kodėl mano žiniatinklio naršyklė kartais neparodo likusių atsisiuntimo laiko?

Turinys:

Kodėl mano žiniatinklio naršyklė kartais neparodo likusių atsisiuntimo laiko?
Kodėl mano žiniatinklio naršyklė kartais neparodo likusių atsisiuntimo laiko?

Video: Kodėl mano žiniatinklio naršyklė kartais neparodo likusių atsisiuntimo laiko?

Video: Kodėl mano žiniatinklio naršyklė kartais neparodo likusių atsisiuntimo laiko?
Video: How to Fix Cast Device not Showing in Chrome - YouTube 2024, Balandis
Anonim
Kartais ištikimas atsisiųsti progreso matuoklis jūsų naršyklėje (ar kitoje programoje) tiesiog išmeta rankas ore ir atsisako rodyti likusį atsisiuntimo laiką. Kodėl jis kartais nuliūdo numatytą atsisiuntimo laiką ir kartais nepraneša apie visa tai kartu?
Kartais ištikimas atsisiųsti progreso matuoklis jūsų naršyklėje (ar kitoje programoje) tiesiog išmeta rankas ore ir atsisako rodyti likusį atsisiuntimo laiką. Kodėl jis kartais nuliūdo numatytą atsisiuntimo laiką ir kartais nepraneša apie visa tai kartu?

Šiandieninė klausimų ir atsakymų sesija pateikiama su "SuperUser" - "Stack Exchange", bendruomenės valdoma Q & A grupių asociacija.

Klausimas

"SuperUser" skaitytuvas "Coldblackice" nori sužinoti, kodėl jo naršyklė ne visada dera nešvarumus:

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?

Kur iš tikrųjų?

Atsakymai

"SuperUser" autorius Gronostaj siūlo tokį supratimą:

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://

pradžioje). Tai paprastas teksto protokolas, jis veikia taip:

Pirma, jūsų naršyklė prisijungia prie svetainės serverio ir siunčia norimo atsisiųsti dokumento URL (taip pat tinklalapiai yra ir dokumentai), taip pat tam tikros informacijos apie pačią naršyklę (naudotojo agentas ir tt). Pavyzdžiui, norėdami įkelti "SuperUser" svetainės pagrindinį puslapį,

https://superuser.com/

mano naršyklė siunčia prašymą, kuris atrodo taip:

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

Pirma eilutė nurodo, kurį dokumentą turi grąžinti serveris. Kitos eilutės vadinamos antraštėmis; jie atrodo taip:

Header name: Header value

Šios eilutės siunčia papildomą informaciją, kuri padeda serveriui nuspręsti, ką daryti.

Jei viskas gerai, serveris atsakys siųsdamas prašomą dokumentą. Atsakymas prasideda būsenos pranešimu, po jo - kai kuriomis antraštėmis (su išsamia informacija apie dokumentą) ir, jei viskas gerai, dokumento turinys. Štai kaip atrodo SuperUser serverio atsakymas į mano užklausą:

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 paskutinės eilutės SuperUser serveris uždaro ryšį.

Pirmoji eilutė (

HTTP/1.1 200 OK

) yra atsakymo kodas, šiuo atveju tai yra

200 OK

. Tai reiškia, kad serveris grąžins dokumentą, kaip prašoma. Kai serveris nesugeba tai padaryti, kodas bus dar kažkas: jūs tikriausiai matėte

404 Not Found

ir

403 Forbidden

yra gana dažnas, taip pat. Tada eina antraštės.

Kai naršyklėje atsiranda tuščia eilutė, ji žino, kad viskas, praeinant ta eilute, yra prašomo dokumento turinys. Taigi šiuo atveju

yra pirmoji "SuperUser" pagrindinio puslapio eilutė. Jei prašiau atsisiųsti dokumentą, tai greičiausiai bus kai kurie švelnūs simboliai, nes dauguma dokumentų formatų yra neįskaitomi be išankstinio apdorojimo.

Atgal į antraštes. Labiausiai įdomus mums yra paskutinis,

Content-Length

. Ji informuoja naršyklę, kiek duomenų baitų jis turėtų tikėtis po tuščios eilutės, todėl iš esmės tai yra dokumento dydis, išreikštas baitais. Ši antraštė nėra privaloma ir gali būti praleista serverio. Kartais dokumento dydis negali būti prognozuojamas (pvz., Kai dokumentas generuojamas skristi), kartais tinginiai programuotojai to neįtraukia (dažnai įprasta vairuotojo atsisiuntimo svetainėse), kartais svetaines kuria naujokai, kurie nežino tokios antraštės.

Bet kokiu atveju, nesvarbu, kokia yra priežastis, trūksta antraštės. Tokiu atveju naršyklė nežino, kiek duomenų serveris ketina siųsti, ir tokiu būdu parodo dokumento dydį kaipnežinomas, laukia, kol serveris uždarys ryšį. Ir tai yra nežinomų dokumentų dydžių priežastis.

Ar turite ką nors įtraukti į paaiškinimą? Garsas išjungtas komentaruose. Norite skaityti daugiau atsakymų iš kitų "Tech-savvy Stack Exchange" vartotojų? Patikrinkite visą diskusijų temą čia.

Rekomenduojamas: