14Sep
A volte il misuratore di avanzamento download fedele sul browser( o altra applicazione) getta le mani in aria e rinuncia a visualizzare il tempo di download rimanente. Perché a volte inchioda il tempo di download previsto e talvolta non riesce a segnalarlo tutto insieme?
Today's Question &La sessione di risposta ci viene fornita per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento di Q & A basato su community.
La domanda
SuperUser reader Coldblackice vuole sapere perché il suo browser non sempre mette a repentaglio la sporcizia:
Occasionalmente, quando si scarica un file in un browser web, l'avanzamento del download non "conosce" la dimensione totale del file, oquanto lungo nel download è - mostra solo la velocità con cui viene scaricato, con un totale come "Sconosciuto".
Perché il browser non dovrebbe conoscere la dimensione finale di alcuni file? Da dove viene questa informazione in primo luogo?
Dove effettivamente?
Le risposte Il contributore di SuperUser
Gronostaj offre le seguenti informazioni:
Per richiedere documenti da server Web, i browser utilizzano il protocollo HTTP.Potresti sapere quel nome dalla barra degli indirizzi( potrebbe essere nascosto ora, ma quando fai clic sulla barra degli indirizzi, copia l'URL e incollalo in un editor di testo, vedrai http: // all'inizio).È un semplice protocollo testuale e funziona in questo modo:
Innanzitutto, il browser si collega al server del sito Web e invia un URL del documento che desidera scaricare( anche le pagine Web sono documenti) e alcuni dettagli sul browser stesso( User-Agent ecc.).Ad esempio, per caricare la pagina principale sul sito SuperUser, http: //superuser.com/, il mio browser invia una richiesta simile a questa:
GET / HTTP / 1.1 Host: superuser.com Connessione: keep-alive Accept: text / html, application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-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 Cookie: [rimosso per sicurezza] DNT: 1 If-Modified-Since: Tue, 09 Jul 2013 07:14:17 GMTIl primoline specifica quale documento deve restituire il server. Le altre linee sono chiamate intestazioni;assomigliano a questo:
Intestazione nome: Intestazione valoreQueste linee inviano informazioni aggiuntive che aiutano il server a decidere cosa fare.
Se tutto va bene, il server risponderà inviando il documento richiesto. La risposta inizia con un messaggio di stato, seguito da alcune intestazioni( con dettagli sul documento) e infine, se tutto va bene, il contenuto del documento. Ecco come appare la risposta del server SuperUser per la mia richiesta:
HTTP / 1.1 200 OK Cache-Control: public, max-age = 60 Content-Type: text / html;charset = utf-8 Scade: mar, 09 lug 2013 07:27:20 GMT Ultima modifica: mar, 09 lug 2013 07:26:20 GMT Vary: * Opzioni X-frame: SAMEORIGIN Data: mar, 09 lug 20137:26:19 GMT Content-Length: 139672 & lt;! DOCTYPE html & gt;& Lt; html & gt;[... snip. ..] & lt; / html & gt;Dopo l'ultima riga, il server di SuperUser chiude la connessione.
La prima riga( HTTP / 1.1 200 OK) contiene il codice di risposta, in questo caso è 200 OK.Significa che il server restituirà un documento, come richiesto. Quando il server non riesce a farlo, il codice sarà un'altra cosa: probabilmente avrete visto 404 Not Found e 403 Forbidden è abbastanza comune. Quindi seguono le intestazioni.
Quando il browser trova una riga vuota nella risposta, sa che tutto quello che ha superato quella linea è il contenuto del documento richiesto. Quindi in questo caso & lt;! DOCTYPE html & gt;è la prima riga del codice della homepage di SuperUser. Se stavo richiedendo un documento da scaricare, probabilmente ci sarebbero alcuni caratteri senza senso, perché la maggior parte dei formati di documenti è illeggibile senza elaborazione precedente.
Torna alle intestazioni. Il più interessante per noi è l'ultimo, Content-Length. Informa il browser quanti byte di dati dovrebbero aspettarsi dopo la riga vuota, quindi in pratica è la dimensione del documento espressa in byte. Questa intestazione non è obbligatoria e può essere omessa dal server. A volte la dimensione del documento non può essere prevista( ad esempio quando il documento viene generato al volo), a volte i programmatori pigri non lo includono( abbastanza comune sui siti di download dei driver), a volte i siti Web sono creati da neofiti che non conosconodi tale intestazione.
Ad ogni modo, qualunque sia il motivo, l'intestazione può mancare. In tal caso il browser non sa quanti dati il server sta per inviare e visualizza quindi la dimensione del documento come sconosciuto , in attesa che il server chiuda la connessione. E questa è la ragione per le dimensioni del documento sconosciuto.
Hai qualcosa da aggiungere alla spiegazione? Sound off nei commenti. Vuoi leggere più risposte dagli altri utenti di Stack Exchange esperti di tecnologia? Controlla la discussione completa qui.