14Sep

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

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?

Šiandienos klausimas &Atsakymų sesija ateina pas mus iš "SuperUser" - "Stack Exchange", bendruomenės pagrįstos "Q & A" svetainių grupės pasidalijimo.

Klausimas

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

Kartais, atsisiusdami failą žiniatinklio naršyklėje, atsisiuntimo progresas "nežino" viso failo dydžio arbakiek toli yra atsisiųstame - tai tiesiog parodo, kokiu greičiu jis atsisiųsti, iš viso kaip "nežinomas".

Kodėl naršyklė nežinotų galutinio kai kurių failų dydžio? Kur ji pirmiausia gauna šią informaciją?

Kur tikrai?

Atsakymai

SuperUser autorius Gronostaj pateikia tokį įžvalgą:

Norėdami prašyti dokumentų iš interneto serverių, naršyklės naudoja HTTP protokolą.Jūs galite žinoti tą vardą iš savo adreso juostos( jis gali būti paslėptas dabar, bet kai spustelėsite adreso juostą, nukopijuokite URL ir įklijuokite jį teksto redaktoriuje, pradžioje pamatysite http: //).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) ir tam tikros informacijos apie pačią naršyklę( Vartotojo agentas ir tt).Pavyzdžiui, jei norite įkelti pagrindinį puslapį SuperUser svetainėje, http: //superuser.com/, mano naršyklė siunčia prašymą, kuris atrodo taip:

GET / HTTP / 1.1 Host: superuser.com Prisijungimas: keep-alive Accept: text / html, application/ xhtml + xml,application/xml;q=0.9,*/*;q=0.8 Vartotojo agentas: Mozilla / 5.0( Windows NT 6.1; WOW64) Priimti-kodavimas: gzip, deflate, sdch Accept-Language: pl-PL, pl; q = 0.8, en-us; q = 0.6; en; q = 0.4 Slapukas: [pašalintas už saugumą] DNT: 1 jei modifikuota-nuo: Tue, 09 Jul 2013 07:14:17 GMT

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

Antraštė pavadinimas: antraštės reikšmė

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

Jei viskas gerai, serveris reaguos siųsdamas prašomą dokumentą.Atsakymas prasideda būsenos pranešimu, po kurio eina keletas antraščių( su išsamia informacija apie dokumentą) ir, jei viskas gerai, dokumento turinys.Štai ką SuperUser serverio atsakymas į mano užklausą atrodo:

HTTP / 1.1 200 OK Talpyklos kontrolė: vieša, max-age = 60 Content-Type: text / html;charset = utf-8 Pasibaigęs: Tue, 09 Liepa 2013 07:27:20 GMT Paskutinį kartą atnaujinta: Tue, 09 Jul 2013 07:26:20 GMT Keičiasi: * X-Frame-Options: SAMEORIGIN Data: Tue, 09 Liepa 201307:26:19 GMT Turinio ilgis: 139672 & lt;! DOCTYPE html & gt;& lt; html & gt;[... snip. ..] & lt; / html & gt;

Po paskutinės eilutės SuperUser serveris uždaro ryšį.

Pirmoje eilutėje( 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 nerasta, taip pat 403 uždrausta. Tada eina antraštės.

Kai naršyklė nustato tuščią eilutę atsakyme, ji žino, kad viskas, praeinant ta eilute, yra prašomo dokumento turinys. Taigi šiuo atveju & ​​lt;! DOCTYPE html & gt;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.Įdomiausia mums yra paskutinė, turinio-ilgio. 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žinotokios antraštės.

Bet kuriuo atveju, nesvarbu, kokia yra priežastis, trūksta antraštės. Tokiu atveju naršyklė nežino, kiek duomenų serveris ketina siųsti, taigi, dokumento dydis rodomas kaip nežinoma , laukiant, kol serveris uždarys ryšį.Ir tai yra nežinomų dokumentų dydžių priežastis.

Ar 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.