If-Koubou

Zašto moj web-preglednik ponekad ne uspije prikazati preostalo vrijeme preuzimanja?

Zašto moj web-preglednik ponekad ne uspije prikazati preostalo vrijeme preuzimanja? (Kako da)

Ponekad vjernik preuzimanje mjerača napretka na vašem pregledniku (ili drugoj aplikaciji) samo baca ruke u zrak i odustaje od prikazivanja preostalog vremena preuzimanja. Zašto ponekad noktira projicirano vrijeme preuzimanja i ponekad ne uspije sve to prijaviti?

Današnja pitanja i odgovori nam se javljaju zahvaljujući SuperUseru - podjele Stack Exchange-a, zajednice-driven grupiranja Q & A web stranica.

Pitanje

Čitač SuperUser Coldblackice želi znati zašto njegov preglednik ne zna uvijek prljavštinu:

Povremeno, prilikom preuzimanja datoteke u web pregledniku, napredak preuzimanja ne "zna" ukupnu veličinu datoteke ili koliko je daleko u preuzimanju - to samo pokazuje brzinu kojom skida, s ukupnim brojem datoteka kao "Nepoznato".

Zašto preglednik ne bi znao konačnu veličinu nekih datoteka? Odakle dobivaju ove informacije na prvom mjestu?

Gdje doista?

Odgovori

Gronostaj koji daje doprinos SuperUseru nudi sljedeće uvide:

Da biste zatražili dokumente s web poslužitelja, preglednici koriste HTTP protokol. Možda znate to ime s adresne trake (možda je skriveno sada, ali kada kliknete adresnu traku, kopirajte URL i zalijepite ga u neki uređivač teksta, vidjet ćetehttp: // na početku). To je jednostavan protokol koji se temelji na tekstu i funkcionira ovako:

Prvo se vaš preglednik povezuje s poslužiteljem web stranice i šalje URL dokumenta koji želi preuzeti (web stranice su i dokumenti) i neke pojedinosti o samom pregledniku (User-Agent itd.). Na primjer, za učitavanje glavne stranice na web mjestu SuperUser,http://superuser.com/, moj preglednik šalje zahtjev koji izgleda ovako:

GET / HTTP / 1.1 Domaćin: superuser.com Povezanost: zadržati živ Prihvati: tekst / html, aplikacija / xhtml + xml, aplikacija / xml; q = 0,9, * / *; q = 0,8 Korisnički agent: Mozilla / Windows NT 6.1; WOW64) Accept-Encoding: gzip, deflate, sdch Prihvaćanje jezika: pl-PL, q = 0,8, en-US; q = 0,6; en; q = 0,4 Cookie: [uklonjeno zbog sigurnosti] DNT : 1 Ako-izmijenjeno-od: sub, 09 srpnja 2013 07:14:17 GMT 

Prva linija određuje koji će se dokument poslužitelja vratiti. Druge linije nazivaju se zaglavlja; oni izgledaju ovako:

Naziv zaglavlja: vrijednost zaglavlja 

Ti retci šalju dodatne informacije koje pomažu poslužitelju odlučiti što učiniti.

Ako je sve u redu, poslužitelj će odgovoriti slanjem zatraženog dokumenta. Odgovor započinje s porukom o statusu, nakon čega slijedi nekoliko zaglavlja (s pojedinostima o dokumentu) i konačno, ako je sve u redu, sadržaj dokumenta. Ovako izgleda odgovor SuperUser poslužitelja za moj zahtjev:

HTTP / 1,1 200 OK Cache-Control: javno, max-age = 60 Sadržaj-tip: tekst / html; charset = utf-8 Istječe: Tue, 09 Jul 2013 07:27:20 GMT Zadnja izmjena: Tue, 09 Jul 2013 07:26:20 GMT Vary: * X-Frame-Options: SAMEORIGIN Datum: uto, 09. srpnja 2013. 07:26:19 GMT Sadržaj-Length: 139672 [... snip ...] 

Nakon posljednjeg retka, poslužitelj SuperUser-a zatvara vezu.

Prva crta (HTTP / 1.1 200 OK) sadrži kod odgovora, u ovom slučaju to jeU redu, To znači da će poslužitelj vratiti dokument, kako je zatraženo. Kada poslužitelj to ne uspije, kod će biti nešto drugo: vjerojatno ste ga vidjeli404 nije pronađeno, i403 Zabranjeno vrlo je čest. Zatim slijede zaglavlja.

Kada preglednik pronađe praznu liniju u odgovoru, zna da je sve prošlo taj redak sadržaj dokumenta koji je zatražio. Dakle, u ovom slučaju je prva linija kodova SuperUserove stranice. Ako bih zatražio dokument za preuzimanje, vjerojatno bi to bio neki nejasni znakovi jer većina formata dokumenata nije moguće čitati bez prethodne obrade.

Natrag na zaglavlja. Najzanimljiviji je za nas posljednji,Sadržaj-Dužina, Informira preglednika koliko bajtova podataka treba očekivati ​​nakon praznog retka, pa je u osnovi veličina dokumenta izražena u bajtovima. Ovo zaglavlje nije obavezno i ​​poslužitelj može propustiti. Ponekad se veličina dokumenta ne može predvidjeti (primjerice, kada se dokument generira u letu), ponekad ga lijeni programeri ne uključuju (prilično uobičajena mjesta za preuzimanje upravljačkih programa), ponekad web stranice stvaraju novorođenčad koja ne zna takvog zaglavlja.

U svakom slučaju, bez obzira na razlog, zaglavlje može nestati. U tom slučaju preglednik ne zna koliko će podataka poslužitelj poslati i tako prikazuje veličinu dokumenta kaonepoznata, čekajući da poslužitelj zatvori vezu. I to je razlog za nepoznate veličine dokumenata.

Imate li nešto za objašnjenje? Zvuči u komentarima. Želite li pročitati više odgovora od drugih tehnoloških korisnika Stack Exchangea? Pogledajte ovdje cijelu raspravu.