If-Koubou

De ce browser-ul meu web uneori nu a afișat timpii de descărcare rămase?

De ce browser-ul meu web uneori nu a afișat timpii de descărcare rămase? (Cum să)

Uneori, contorul de încredere descărcat de pe browser (sau altă aplicație) își aruncă mâinile în aer și renunță la afișarea timpului de descărcare rămas. De ce, uneori, unghiile proiectate de descărcare de timp și, uneori, nu reușește să raporteze toate împreună?

Sesiunea de întrebări și răspunsuri din ziua de astăzi vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor Q & A.

Intrebarea

Cititorul de super-utilizatori Coldblackice vrea să știe de ce browser-ul său nu întotdeauna mănâncă mizeria:

Ocazional, atunci când descărcați un fișier într-un browser web, progresul descărcării nu "cunoaște" dimensiunea totală a fișierului sau cât de departe se află în descărcare - arată doar viteza la care se descarcă, cu un total ca "necunoscut".

De ce nu cunoștea browserul dimensiunea finală a anumitor fișiere? De unde primește această informație în primul rând?

Unde într-adevăr?

Raspunsurile

Contribuitorul SuperUser Gronostaj oferă următoarea perspectivă:

Pentru a solicita documente de la servere web, browserele utilizează protocolul HTTP. S-ar putea să știți acest nume din bara de adrese (poate fi ascuns acum, dar când faceți clic pe bara de adrese, copiați adresa URL și inserați-o într-un editor de text, veți vedeahttp: // la inceput). Este un protocol simplu bazat pe text și funcționează astfel:

Mai întâi, browserul dvs. se conectează la serverul site-ului și trimite o adresă URL a documentului pe care dorește să îl descarce (paginile web sunt și documente) și câteva detalii despre browser-ul însuși (User-Agent etc.). De exemplu, pentru a încărca pagina principală pe site-ul SuperUser,http://superuser.com/, browserul meu trimite o cerere care arată astfel:

GET / HTTP / 1.1 Gazdă: superuser.com Conectare: Keep-alive Acceptați: text / html, aplicație / xhtml + xml, aplicație / xml; Windows NT 6.1, WOW64) Accept-Encoding: gzip, deflate, sdch Accept-Language: pl = PL, : 1 Dacă-Modificat-Din: Tue, 09 Jul 2013 07:14:17 GMT 

Prima linie specifică ce document ar trebui să revină serverul. Celelalte linii sunt numite anteturi; ele arata astfel:

Denumirea antetului: Valoarea antetului 

Aceste linii trimit informații suplimentare care ajută serverul să decidă ce să facă.

Dacă totul este bine, serverul va răspunde prin trimiterea documentului solicitat. Răspunsul începe cu un mesaj de stare, urmat de unele antete (cu detalii despre document) și, în final, dacă totul este bine, conținutul documentului. Iată răspunsul serverului SuperUser pentru solicitarea mea:

HTTP / 1.1 200 OK Cache-Control: public, max-age = 60 Content-Type: text / html; charset = utf-8 Expiră: Tue, 09 Jul 2013 07:27:20 GMT Ultima modificare: Tue, 09 Jul 2013 07:26:20 GMT Vary: * X-Frame-Opțiuni: SAMEORIGIN Data: Tue, 09 Jul 2013 07:26:19 GMT Continut-Durata: 139672 [... snip ...] 

După ultima linie, serverul serverului SuperUser închide conexiunea.

Prima linie (HTTP / 1.1 200 OK) conține codul de răspuns, în acest caz este200 OK. Înseamnă că serverul va returna un document, conform cerințelor. Când serverul nu reușește să facă acest lucru, codul va fi altceva: probabil ați văzut404 Nu a fost gasit, și403 Interzis este destul de comună. Apoi, anteturile urmează.

Când browserul găsește o linie goală în răspuns, știe că tot ce trece de acea linie este conținutul documentului pe care l-a solicitat. Deci, în acest caz este primul rând al codului de pornire al SuperUser. Dacă aș fi solicitat un document pentru a descărca, probabil că ar fi niște caractere grosolane, pentru că majoritatea formatelor de documente nu pot fi citite fără o prelucrare prealabilă.

Înapoi la anteturi. Cel mai interesant pentru noi este ultimul,Content-Length. Acesta informează browserul câte octeți de date ar trebui să se aștepte după linia goală, deci în esență este dimensiunea documentului exprimată în octeți. Acest antet nu este obligatoriu și poate fi omis de către server. Uneori, dimensiunea documentului nu poate fi prevăzută (de exemplu, atunci când documentul este generat în zbor), uneori programele leneș nu îl includ (destul de frecvente pe site-urile de descărcare a driverului), uneori site-urile sunt create de începători care nu știu a unui astfel de antet.

Oricum, oricare ar fi motivul, antetul poate lipsi. În acest caz, browserul nu știe câte date are serverul să trimită și astfel afișează dimensiunea documentului canecunoscut, așteptând ca serverul să închidă conexiunea. Și acesta este motivul pentru dimensiunile necunoscute ale documentelor.

Aveți ceva de adăugat la explicație? Sunați în comentariile. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.