Pagina inicial » como » Por que o meu navegador da Web às vezes não exibe os tempos de download restantes?

    Por que o meu navegador da Web às vezes não exibe os tempos de download restantes?

    Às vezes, o medidor de progresso de download fiel em seu navegador (ou outro aplicativo) apenas joga suas mãos no ar e desiste de exibir o tempo de download restante. Por que, às vezes, ele prega o tempo de download projetado e, às vezes, não consegue reportar tudo junto?

    A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas conduzido pela comunidade..

    A questão

    Leitor de SuperUser Coldblackice quer saber por que seu navegador nem sempre consome a sujeira:

    Ocasionalmente, ao fazer o download de um arquivo em um navegador da Web, o progresso do download não "conhece" o tamanho total do arquivo ou o tempo de download - ele mostra apenas a velocidade com que ele é baixado, com um total como "Desconhecido".

    Por que o navegador não sabe o tamanho final de alguns arquivos? Onde fica essa informação em primeiro lugar??

    Onde de fato?

    As respostas

    O colaborador do SuperUser Gronostaj oferece a seguinte visão:

    Para solicitar documentos de servidores da Web, os navegadores usam o protocolo HTTP. Você pode saber esse nome na sua barra de endereço (pode estar oculto agora, mas quando você clica na barra de endereços, copia o URL e cola em algum editor de texto, você verá http: // no inicio). É um protocolo simples baseado em texto e funciona assim:

    Primeiro, o navegador se conecta ao servidor do site e envia uma URL do documento que deseja baixar (as páginas da Web também são documentos) e alguns detalhes sobre o próprio navegador (Agente do usuário, etc.). Por exemplo, para carregar a página principal no site do SuperUser, http://superuser.com/, meu navegador envia uma solicitação semelhante a esta:

    GET / HTTP / 1.1 Host: superuser.com Conexão: keep-alive Aceitar: text / html, aplicativo / xhtml + xml, application / xml; q = 0,9, * / *; q = 0,8 User-Agent: Mozilla / 5.0 ( Windows NT 6.1; WOW64) Aceitar-Codificação: gzip, deflate, sdch Aceitar Idioma: pl-PL, pl; q = 0.8, en-US; q = 0.6, en; q = 0.4 Cookie: [removido para segurança] DNT : 1 If-Modified-Since: ter, 09 de julho de 2013 07:14:17 GMT 

    A primeira linha especifica qual documento o servidor deve retornar. As outras linhas são chamadas de cabeçalhos; eles se parecem com isso:

    Nome do cabeçalho: valor do cabeçalho 

    Essas linhas enviam informações adicionais que ajudam o servidor a decidir o que fazer.

    Se tudo estiver bem, o servidor responderá enviando o documento solicitado. A resposta começa com uma mensagem de status, seguida por alguns cabeçalhos (com detalhes sobre o documento) e, finalmente, se tudo estiver bem, o conteúdo do documento. É assim que a resposta do servidor SuperUser para minha solicitação se parece:

    HTTP / 1.1 200 OK Controle de Cache: public, max-age = 60 Tipo de Conteúdo: text / html; charset = utf-8 Expira: Ter, 09 Jul 2013 07:27:20 GMT Última modificação: Ter, 09 de julho de 2013 07:26:20 GMT Variam: * X-Frame-Opções: SAMEORIGIN Data: Ter, 09 de julho de 2013 07:26:19 GMT Content-Length: 139672 [… recorte…]  

    Após a última linha, o servidor do SuperUser fecha a conexão.

    A primeira linha (HTTP / 1.1 200 OK) contém o código de resposta, neste caso é 200 OK. Isso significa que o servidor retornará um documento, conforme solicitado. Quando o servidor não consegue fazer isso, o código será outra coisa: você provavelmente já viu 404 não encontrado, e 403 Proibido é bastante comum também. Então os cabeçalhos seguem.

    Quando o navegador encontra uma linha vazia na resposta, sabe que tudo o que passou dessa linha é o conteúdo do documento solicitado. Então neste caso  é a primeira linha do código da homepage do SuperUser. Se eu estivesse solicitando um documento para download, provavelmente seriam alguns caracteres sem sentido, porque a maioria dos formatos de documentos é ilegível sem processamento prévio.

    De volta aos cabeçalhos. O mais interessante para nós é o último, Comprimento do conteúdo. Ele informa ao navegador quantos bytes de dados ele deve esperar após a linha vazia, então basicamente é o tamanho do documento expresso em bytes. Este cabeçalho não é obrigatório e pode ser omitido pelo servidor. Às vezes, o tamanho do documento não pode ser previsto (por exemplo, quando o documento é gerado na hora), às vezes programadores preguiçosos não o incluem (muito comum em sites de download de drivers), às vezes sites são criados por novatos que não sabem de tal cabeçalho.

    De qualquer forma, seja qual for o motivo, o cabeçalho pode estar faltando. Nesse caso, o navegador não sabe quantos dados o servidor vai enviar e, portanto, exibe o tamanho do documento como desconhecido, esperando o servidor fechar a conexão. E essa é a razão para tamanhos de documentos desconhecidos.


    Tem algo a acrescentar à explicação? Soe fora nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui.