14Sep
Včasih zvestni merilnik napredka prenosa v vašem brskalniku( ali drugi aplikaciji) samo vrže roke v zrak in se odreče prikazu preostalega časa prenosa. Zakaj včasih žeblji predvideni čas prenosa in včasih sploh ne poročajo skupaj?
Današnje vprašanje &S sejo odgovora prihaja uporaba SuperUserja, ki je razdeljena na Stack Exchange, skupinsko spletno stran Q & A.
Vprašanje
bralnik SuperUserja Coldblackice želi vedeti, zakaj njegov brskalnik vedno ne poskrbi za umazanijo:
Občasno pri prenosu datoteke v spletni brskalnik napredek prenosa ne "ve" celotno velikost datoteke alikako daleč je pri prenosu - to samo kaže hitrost prenosa, s skupno kot "neznano".
Zakaj brskalnik ne bi vedel o končni velikosti nekaterih datotek? Kje dobi te podatke?
Kje res?
Odzivnik
SuperUser, ki prispeva Gronostaj, ponuja naslednji vpogled:
Če želite zahtevati dokumente s spletnih strežnikov, brskalniki uporabljajo protokol HTTP.To ime lahko poznate iz naslovne vrstice( morda je zdaj skrita, ko pa kliknete naslovno vrstico, kopirajte URL in ga prilepite v urejevalnik besedila, boste na začetku zagledali http: //).To je preprost besedilni protokol in deluje takole:
Najprej se vaš brskalnik poveže s strežnikom spletnega mesta in pošlje URL dokumenta, ki ga želi prenesti( spletne strani so tudi dokumenti) in nekatere podrobnosti o samem brskalniku( User-Agent itd.).Na primer, če želite naložiti glavno stran na spletno mesto SuperUser, http: //superuser.com/, moj brskalnik pošlje zahtevo, ki je videti takole:
GET / HTTP / 1.1 Gostitelj: superuser.com Povezava: ohraniti življenje Sprejmi: text / html, aplikacija/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 Sprejem-jezik: pl-PLDNT: 1 If-Modified-Od: Tue, 09 Jul 2013 07:14:17 GMTPrvivrstica določa, kateri dokument mora vrniti strežnik. Druge vrstice se imenujejo glave;izgledajo tako:
Ime glave: vrednost glaveTe vrstice pošiljajo dodatne informacije, ki pomagajo strežniku odločiti, kaj naj storijo.
Če je vse v redu, bo strežnik odgovoril s pošiljanjem zahtevanega dokumenta. Odziv se začne s sporočilom o stanju, ki mu sledijo nekateri glavi( s podrobnostmi o dokumentu) in končno, če je vse v redu, vsebina dokumenta. To je tisto, kar vam odgovori odgovor SuperUserjevega strežnika za mojo zahtevo:
HTTP / 1.1 200 OK Cache-Control: javni, 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 Vari-X-Frame Options: SAMEORIGIN Date: Tue, 09 Jul 201307:26:19 GMT Dolžina vsebine: 139672 & lt;! DOCTYPE html & gt;& lt; html & gt;[... snip. ..] & lt; / html & gt;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 zahteval. Ko strežniku to ne uspe, bo koda nekaj drugega: verjetno ste videli 404 ni mogoče najti, 403 zabranjenih pa je precej pogosto. Nato sledijo glave.
Ko brskalnik najde prazno črto v odgovoru, ve, da je vse, kar je mimo te vrstice, vsebina dokumenta, ki ga je zahteval. Torej v tem primeru & lt;! DOCTYPE html & gt;je prva vrstica domače kode SuperUserja.Če bi zahteval, da se dokument prenese, bi bilo verjetno nekaj grobih znakov, ker je večina zapisov dokumentov neberljiva brez predhodne obdelave.
Nazaj na glave. Najbolj zanimiva za nas je zadnja, Content-Length. Brskalnik obvesti, koliko bajtov podatkov naj bi pričakovali po prazni vrstici, zato je v bistvu velikost dokumenta, izražena v bajtih. Ta glava ni obvezna in strežnik ga lahko izpusti. Včasih velikost dokumenta ni mogoče predvideti( na primer, ko je dokument ustvarjen na leti), včasih leni programerji tega ne vključujejo( kar je precej pogosto na spletnih mestih za prenos gonilnikov), včasih pa spletne strani ustvarijo novinci, ki ne vedotakega glava.
Kakorkoli že, ne glede na razlog je glava manjka. V tem primeru brskalnik ne ve, koliko podatkov bo poslal strežnik, in tako prikaže velikost dokumenta neznanega , ki čaka, da strežnik zapre povezavo. In to je razlog za neznane velikosti dokumentov.
Ali želite dodati nekaj pojasnila? Zvok v komentarjih.Želite prebrati več odgovorov od drugih uporabniških članov stack Exchange? Oglejte si celotno temo za razpravo tukaj.