Pagina principala » HOWTO » De ce browser-ul meu web nu reușește să afișeze numărul de ore de descărcare rămase?

    De ce browser-ul meu web nu reușește să afișeze numărul de ore de descărcare rămase?

    Uneori, contorul de încredere descărcat în 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 de descărcare proiectate 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 web Q & A.

    Intrebarea

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

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

    De ce nu cunoștea browserul dimensiunea finală a unor fișiere? 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 vedea http: // la inceput). Este un protocol simplu bazat pe text și funcționează astfel:

    Mai întâi, browserul dvs. se conectează la serverul site-ului web ș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, 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. Acesta este motivul pentru care răspunsul serverului SuperUser pentru solicitarea mea arată:

    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 este 200 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ăzut 404 Nu a fost gasit, și 403 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 descărcare, probabil că ar fi niște caractere grosolane, deoarece majoritatea formatelor de documente nu pot fi citite fără 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 server. Uneori, dimensiunea documentului nu poate fi prezisă (de exemplu când documentul este generat în zbor), uneori, programatorii leneși nu îl includ (destul de obișnuiți 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 ca necunoscut, așteptând 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.