Почему некоторые загружаемые файлы не знают своего размера?

Иногда, при загрузке файла в веб-браузере, процесс загрузки не «знает» общий размер файла или как далеко в его загрузке – он просто показывает скорость, с которой он загружается, с Всего как «Неизвестный».

Почему браузер не знает конечный размер некоторых файлов? Откуда он получает эту информацию в первую очередь?

  • Как скачать видео с YouTube с субтитрами?
  • Как загрузить весь сайт?
  • Как работают Pause-загружаемые загрузки?
  • Возможно ли, чтобы клиент BitTorrent предоставил предпочтения посева только тем, кто также посеял?
  • Как загрузить расширения Firefox из addons.mozilla.org без их установки?
  • Загрузка флеш-роликов из любого источника!
  • Среднее нажатие на ссылку на хром иногда также переключает текущую вкладку на новую.
  • Как остановить людей от загрузки онлайн-видео для офлайн-воспроизведения?
  • Как загрузить весь сайт?
  • Левое поведение проводника Windows в Windows 7
  • Как заблокировать видео html5 в системе
  • Браузеры игнорируют файл hosts
  • 3 Solutions collect form web for “Почему некоторые загружаемые файлы не знают своего размера?”

    Чтобы запросить документы с веб-серверов, браузеры используют протокол HTTP. Вы можете узнать это имя из своей адресной строки (оно может быть скрыто сейчас, но когда вы нажимаете на адресную строку, скопируйте URL-адрес и вставьте его в какой-то текстовый редактор, вы увидите http:// в начале). HTTP – простой текстовый протокол. Он работает следующим образом:

    Во-первых, ваш браузер подключается к серверу веб-сайта и отправляет URL-адрес документа, который он хочет загрузить (веб-страницы также являются документами), а также некоторые сведения о самом браузере ( User-Agent и т. Д.). Например, чтобы загрузить основную страницу на сайте SuperUser, http://superuser.com/ , мой браузер отправляет запрос, который выглядит так:

     GET / HTTP/1.1 Host: superuser.com Connection: 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) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.0 Safari/537.36 Accept-Encoding: gzip,deflate,sdch Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4 Cookie: [removed for security] DNT: 1 If-Modified-Since: Tue, 09 Jul 2013 07:14:17 GMT 

    В первой строке указывается, какой документ должен вернуть сервер. Другие строки называются заголовками; Они выглядят так:

     Header name: Header value 

    Эти строки отправляют дополнительную информацию, которая помогает серверу решить, что делать.

    Если все будет хорошо, сервер ответит, отправив запрошенный документ. Ответ начинается с сообщения о статусе, за которым следуют некоторые заголовки (с подробностями о документе) и, наконец, если все хорошо, содержимое документа. Это то, что ответ сервера SuperUser для моего запроса выглядит так:

     HTTP/1.1 200 OK Cache-Control: public, max-age=60 Content-Type: text/html; charset=utf-8 Expires: Tue, 09 Jul 2013 07:27:20 GMT Last-Modified: Tue, 09 Jul 2013 07:26:20 GMT Vary: * X-Frame-Options: SAMEORIGIN Date: Tue, 09 Jul 2013 07:26:19 GMT Content-Length: 139672 <!DOCTYPE html> <html> [...snip...] </html> 

    После последней строки сервер SuperUser закрывает соединение.

    Первая строка ( HTTP/1.1 200 OK ) содержит код ответа , в этом случае это 200 OK . Это означает, что сервер решил, что он может вернуть документ в соответствии с запросом и обещает, что последующий контент будет таким документом. Если это не так, код будет чем-то другим, и он даст некоторое указание на то, почему сервер не просто возвращает документ в качестве ответа: например, если он не может найти запрошенный документ, он должен возвратиться 404 Not Found , и если вам не разрешен доступ к содержащемуся материалу, он должен вернуть 403 Forbidden .

    После этой первой строки состояния следуют заголовки ответов; Они предоставляют больше информации о возвращаемом контенте, например его Content-type .

    Далее – пустая строка. Это сигнализирует о том, что больше не будет заголовков ответов. Все прошлое этой строки – это содержимое запрашиваемого документа. Таким образом, в приведенном выше примере <!DOCTYPE html> – это первая строка домашней страницы SuperUser (HTML-документ). Если бы я запрашивал документ для загрузки, вероятно, это были бы некоторые тарабарщины, потому что большинство форматов документов не читаются без предварительной обработки.

    Вернуться к заголовкам. Самый интересный для нас – последний, Content-Length . Он сообщает браузеру, сколько байтов данных он должен ожидать после пустой строки, поэтому в основном это размер документа, выраженный в байтах. Этот заголовок не является обязательным и может быть опущен сервером. Иногда размер документа не может быть предсказан (например, когда документ генерируется «на лету»), иногда ленивые программисты не включают его (довольно часто на сайтах загрузки драйверов), иногда сайты создаются новичками, которые не знают Такого заголовка.

    В любом случае, независимо от причины, заголовок может отсутствовать. В этом случае браузер не знает, сколько данных сервер собирается отправить, и, таким образом, отображает размер документа как неизвестный , ожидая завершения соединения с сервером. И в этом причина неизвестных размеров документа.

    Заголовок HTTP Content-Length HTTP является необязательным в некоторых случаях, и поэтому он не может передаваться вместе с файлом; Конец файла будет сигнализироваться при закрытии сокета.

    Когда контент (например, документ .pdf или лист Excel) создается «на лету», размер не может быть известен ранее. В этом случае сервер не может отправить вам размер загрузки до этого, и браузер не сможет отобразить общий размер.

    Давайте будем гением компьютера.