Perché il mio browser Web a volte non riesce a visualizzare i tempi di download rimanenti?
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?
La sessione di domande e risposte di oggi ci viene fornita per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento di siti Web di domande e risposte basato sulla comunità.
La domanda
Il lettore SuperUser Coldblackice vuole sapere perché il suo browser non mette sempre 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, o quanto lontano 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? Dove prende queste informazioni in primo luogo?
Dove effettivamente?
Le risposte
Il collaboratore 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 così: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:Host GET / HTTP / 1.1: superuser.com Connessione: keep-alive Accetta: 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 Se modificato, dal: mar, 09 lug 2013 07:14:17 GMT
La prima riga specifica quale documento deve essere restituito dal server. Le altre linee sono chiamate intestazioni; sembrano così:
Nome intestazione: valore intestazione
Queste 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: * X-Frame-Options: SAMEORIGIN Data: mar, 09 lug 2013 07:26:19 GMT Content-Length: 139672 [... snip ...]
Dopo l'ultima riga, il server di SuperUser chiude la connessione.
La prima linea (
HTTP / 1.1 200 OK
) contiene il codice di risposta, in questo caso lo è200 OK
. Significa che il server restituirà un documento, come richiesto. Quando il server non riesce a farlo, il codice sarà qualcos'altro: probabilmente hai visto404 non trovato
, e403 Proibito
è abbastanza comune, anche. 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
è 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 si tratta delle dimensioni del documento espresse 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 conoscono di tale intestazione.Ad ogni modo, qualunque sia la ragione, l'intestazione può mancare. In tal caso il browser non sa quanti dati il server sta per inviare e quindi visualizza 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.