Домашняя » как » Почему мой веб-браузер иногда не отображает оставшееся время загрузки?

    Почему мой веб-браузер иногда не отображает оставшееся время загрузки?

    Иногда верный индикатор прогресса загрузки в вашем браузере (или другом приложении) просто вскидывает руки и разочаровывается в отображении оставшегося времени загрузки. Почему он иногда прибивает предполагаемое время загрузки, а иногда не сообщает обо всем вместе?

    Сегодняшняя сессия вопросов и ответов пришла к нам благодаря SuperUser - подразделению Stack Exchange, группе веб-сайтов вопросов и ответов, управляемой сообществом..

    Вопрос

    Читатель SuperUser Coldblackice хочет знать, почему его браузер не всегда грязный:

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

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

    Где на самом деле?

    Ответы

    Участник SuperUser Гроностай предлагает следующее понимание:

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

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

    GET / HTTP / 1.1 Хост: superuser.com Соединение: keep-alive Принять: 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: [удалено для безопасности] DNT : 1 If-Modified-Since: вторник, 09 июля 2013 07:14:17 GMT 

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

    Имя заголовка: значение заголовка 

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

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

    HTTP / 1.1 200 OK Cache-Control: общедоступный, max-age = 60 Content-Type: text / html; charset = utf-8 Истекает: вторник, 09 июля 2013 г. 07:27:20 GMT Последнее изменение: вторник, 09 июля 2013 г. 07:26:20 GMT Варьируется: * X-Frame-Options: SAMEORIGIN Дата: вторник, 09 июля 2013 г. 07:26:19 GMT Контент-длина: 139672 [… snip…]  

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

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

    Когда браузер находит пустую строку в ответе, он знает, что все, что за этой строкой, является содержимым запрошенного документа. Так что в этом случае  это первая строка кода домашней страницы SuperUser. Если бы я запрашивал документ для загрузки, это, вероятно, были бы некоторые бессмысленные символы, потому что большинство форматов документов не читаются без предварительной обработки..

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

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


    Есть что добавить к объяснению? Звук выключен в комментариях. Хотите узнать больше ответов от других технически подкованных пользователей Stack Exchange? Ознакомьтесь с полным обсуждением здесь.