Kodėl mano žiniatinklio naršyklė kartais neparodo likusių parsisiuntimo laiko?
Kartais ištikimas atsisiuntimo eigos matuoklis jūsų naršyklėje (ar kitoje programoje) tiesiog išmeta rankas į orą ir atsisako rodyti likusį parsisiuntimo laiką. Kodėl ji kartais priartina numatomą parsisiuntimo laiką ir kartais nepraneša apie tai kartu?
Šiandienos „Klausimų ir atsakymų“ sesija mums suteikiama pagal „SuperUser“ - „Stack Exchange“ padalinį, bendruomenės sukurtą „Q&A“ svetainių grupavimą.
Klausimas
„SuperUser“ skaitytojas Coldblackice nori sužinoti, kodėl jo naršyklė ne visada patiekia purvo:
Kartais, atsisiunčiant failą į žiniatinklio naršyklę, atsisiuntimo eiga „nežino“ viso failo dydžio arba kiek jis atsisiunčiamas atsisiunčiant failą - tai tik rodo greitį, kuriuo jis atsisiunčiamas. kaip „Nežinomas“.
Kodėl naršyklė nežino galutinio kai kurių failų dydžio? Kur ji gauna šią informaciją pirmiausia?
Iš tiesų?
Atsakymai
„SuperUser“ autorius Gronostaj siūlo tokią informaciją:
Norėdami paprašyti dokumentų iš žiniatinklio serverių, naršyklės naudoja HTTP protokolą. Jūs galite žinoti šį pavadinimą iš savo adreso juostos (ji gali būti paslėpta dabar, bet kai spustelėsite adreso juostą, nukopijuokite URL ir įklijuokite jį į kai kurį teksto redaktorių, pamatysite
http: //
pradžioje). Tai paprastas teksto protokolas ir jis veikia taip:Pirma, jūsų naršyklė prisijungia prie svetainės serverio ir siunčia dokumento, kurį ji nori atsisiųsti, URL (taip pat ir interneto puslapiai yra dokumentai) ir kai kurie duomenys apie pačią naršyklę (vartotojo agentą ir kt.). Pavyzdžiui, norint įkelti pagrindinį puslapį „SuperUser“ svetainėje,
http://superuser.com/
, mano naršyklė siunčia užklausą, kuri atrodo taip:GET / HTTP / 1.1 Priimančioji: superuser.com Ryšys: keep-alive Priimti: text / html, application / xhtml + xml, application / xml; q = 0,9, * / *; q = 0.8 vartotojo agentas: Mozilla / 5.0 ( Windows NT 6.1; WOW64) Priimti kodavimą: gzip, deflate, sdch Accept-Language: pl-PL, pl; q = 0,8, en-US; q = 0.6, en; q = 0.4 slapukas: [pašalintas saugumui] DNT : 1 Jei pakeista-Nuo: Tue, 2013 m. Liepos 9 d. 07:14:17 GMT
Pirmoje eilutėje nurodoma, kurį dokumentą serveris turėtų grąžinti. Kitos eilutės vadinamos antraštėmis; jie atrodo taip:
Antraštės pavadinimas: antraštės reikšmė
Šios eilutės siunčia papildomą informaciją, kuri padeda serveriui nuspręsti, ką daryti.
Jei viskas gerai, serveris atsakys išsiųsdamas prašomą dokumentą. Atsakymas prasideda būsenos pranešimu, po kurio seka kai kurios antraštės (su informacija apie dokumentą) ir galiausiai, jei viskas gerai, dokumento turinys. Štai kaip atrodo „SuperUser“ serverio atsakymas į mano užklausą:
HTTP / 1.1 200 OK Cache-Control: viešas, maksimalus amžius = 60 Turinio tipas: text / html; charset = utf-8 Galioja iki: 2013 m. liepos 9 d. 07:27:20 GMT Paskutinis pakeitimas: antradienis, 2013 m. liepos 9 d. 07:26:20 GMT Vary: * X-Frame-Options: SAMEORIGIN Data: 2013 m. liepos 9 d. 07:26:19 GMT turinio ilgis: 139672 [… snip…]
Po paskutinės eilutės „SuperUser“ serveris uždaro ryšį.
Pirmoji eilutė (
HTTP / 1.1 200 Gerai
) yra atsakymo kodas, šiuo atveju tai yra200 Gerai
. Tai reiškia, kad serveris grąžins dokumentą, kaip reikalaujama. Kai serveris to nepadaro, kodas bus kažkas kitas: tikriausiai matėte404 Nerasta
, ir403 Uždrausta
yra gana dažnas. Tada seka antraštės.Kai naršyklėje atsakyme randama tuščia eilutė, ji žino, kad viskas, kas praeityje, yra prašomo dokumento turinys. Taigi šiuo atveju
yra pirmoji SuperUserio puslapio kodo eilutė. Jei prašau parsisiųsti dokumentą, tikriausiai tai būtų kai kurie gibberiniai simboliai, nes dauguma dokumentų formatų yra neįskaitomi be išankstinio apdorojimo.
Grįžti į antraštes. Įdomiausia mums yra paskutinis,
Turinio ilgis
. Ji informuoja naršyklę, kiek baitų duomenų 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 serveris gali jį praleisti. Kartais negalima numatyti dokumento dydžio (pvz., Kai dokumentas generuojamas skrendant), kartais tingūs programuotojai neįtraukia jo (gana dažnai vairuotojo atsisiuntimo svetainėse), kartais svetaines sukuria naujokai, kurie nežino tokios antraštės.Bet kokiu atveju, nepaisant priežasties, antraštė gali būti trūksta. Tokiu atveju naršyklė nežino, kiek duomenų, kuriuos serveris ketina siųsti, parodys dokumento dydį kaip nežinoma, laukia, kol serveris uždarys ryšį. Ir tai yra nežinomų dokumentų dydžių priežastis.
Ar ką nors papildyti paaiškinimu? Garsas išjungtas komentaruose. Norite perskaityti daugiau atsakymų iš kitų „tech-savvy Stack Exchange“ vartotojų? Čia rasite visą diskusijų temą.