Domača » kako » Zakaj moj spletni brskalnik včasih ne prikaže preostalih časov prenosa?

    Zakaj moj spletni brskalnik včasih ne prikaže preostalih časov prenosa?

    Včasih zvest prenosni merilnik napredka v vašem brskalniku (ali drugi aplikaciji) samo vrže roke v zrak in opusti prikaz preostalega časa prenosa. Zakaj je včasih nail napovedan čas prenosa in včasih ne poroča vse skupaj?

    Današnja seja vprašanj in odgovorov prihaja z namenom SuperUser-a, ki je del skupine Stack Exchange, ki temelji na skupnostih spletnih mest za vprašanja in odgovore.

    Vprašanje

    Bralnik SuperUser Coldblackice želi vedeti, zakaj v brskalniku ni vedno umazanija:

    Občasno, ko prenos datoteke prenesete v spletni brskalnik, napredek prenosa ne »pozna« celotne velikosti datoteke ali kako daleč je pri prenosu - samo prikazuje hitrost, s katero se prenaša, s skupno kot »Neznano«.

    Zakaj brskalnik ne pozna končne velikosti nekaterih datotek? Kje sploh dobijo te informacije?

    Kjer je res?

    Odgovori

    Sodelavka SuperUser Gronostaj ponuja naslednji vpogled:

    Če želite zahtevati dokumente od spletnih strežnikov, brskalniki uporabljajo protokol HTTP. To ime morda poznate iz naslovne vrstice (morda je zdaj skrito, vendar ko kliknete naslovno vrstico, kopirate URL in ga prilepite v urejevalnik besedila, videli boste http: // na začetku). To je preprost besedilni protokol in deluje tako:

    Najprej se brskalnik poveže s strežnikom spletnega mesta in pošlje URL dokumenta, ki ga želi prenesti (spletne strani so tudi dokumenti) in nekaj podrobnosti o samem brskalniku (User-Agent itd.). Če želite na primer naložiti glavno stran na spletno mesto SuperUser, http://superuser.com/, moj brskalnik pošlje zahtevo, ki izgleda takole:

    GET / HTTP / 1.1 Gostitelj: superuser.com Povezava: ohrani živo Sprejmi: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8 Uporabniški 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 piškotek: [odstranjeno zaradi varnosti] DNT : 1 If-Modified-Od: Tue, 09 Jul 2013 07:14:17 GMT 

    Prva vrstica določa, kateri dokument bo strežnik vrnil. Druge vrstice se imenujejo glave; izgledajo tako:

    Ime glave: vrednost glave 

    Te vrstice pošiljajo dodatne informacije, ki pomagajo strežniku pri odločanju, kaj storiti.

    Če je vse v redu, se bo strežnik odzval s pošiljanjem zahtevanega dokumenta. Odziv se začne s sporočilom o stanju, ki mu sledijo nekateri naslovi (s podrobnostmi o dokumentu) in končno, če je vse v redu, vsebino dokumenta. Odgovor strežnika SuperUser za mojo zahtevo je tak:

    HTTP / 1.1 200 OK Nadzor predpomnilnika: javni, max-age = 60 Vsebina-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 Vari: * Možnosti X-Frame-a: SAMEORIGIN Datum: Tue, 09 Jul 2013 07:26:19 GMT Vsebina-dolžina: 139672 [… snip…]  

    Po zadnji vrstici strežnik SuperUser zapre povezavo.

    Prva vrstica (HTTP / 1.1 200 OK) vsebuje odzivno kodo, v tem primeru je 200 OK. To pomeni, da bo strežnik vrnil dokument, kot je zahtevano. Ko strežnik tega ne uspe, bo koda nekaj drugega: verjetno ste jo videli 404 ni najdeno, in 403 Prepovedano precej pogosta. Nato sledijo glave.

    Ko brskalnik v odgovoru najde prazno vrstico, ve, da je vse, kar je mimo te vrstice, vsebina dokumenta, ki ga je zahteval. Torej v tem primeru  je prva vrstica kode domače strani uporabnika. Če sem zahteval prenos dokumenta, bi to verjetno vsebovalo nekaj nejasnih znakov, ker večina formatov dokumentov ni mogoče prebrati brez predhodne obdelave.

    Nazaj na glave. Najbolj zanimiv za nas je zadnji, Dolžina vsebine. Obvesti brskalnik, koliko bajtov podatkov naj pričakuje po prazni vrstici, zato je v bistvu velikost dokumenta izražena v bajtih. Ta glava ni obvezna in jo strežnik lahko izpusti. Včasih velikosti dokumenta ni mogoče predvideti (na primer, ko je dokument ustvarjen v potovanju), včasih ga lenobni programerji ne vključijo (kar je pogosto na mestih za prenos gonilnikov), včasih pa spletna mesta ustvarijo začetniki, ki ne vedo, take glave.

    Kakorkoli že, ne glede na razlog, glava lahko manjka. V tem primeru brskalnik ne ve, koliko podatkov bo strežnik poslal, in tako prikaže velikost dokumenta kot neznano, čaka, da strežnik zapre povezavo. In to je razlog za neznane velikosti dokumentov.


    Imate kaj dodati pojasnilu? Zvok izključen v komentarjih. Želite prebrati več odgovorov drugih uporabnikov tehnologije Stack Exchange? Oglejte si celotno nit razprave tukaj.