Иногда точный индикатор прогресса загрузки в вашем браузере (или другом приложении) просто поднимает руки вверх и отказывается отображать оставшееся время загрузки. Почему иногда он фиксирует прогнозируемое время загрузки, а иногда не сообщает все вместе?
Сегодняшняя сессия вопросов и ответов проходит благодаря SuperUser - подразделению Stack Exchange, группы веб-сайтов вопросов и ответов, управляемой сообществом.
Вопрос
Читатель SuperUser Coldblackice хочет знать, почему его браузер не всегда пачкает грязь:
Иногда при загрузке файла в веб-браузере прогресс загрузки не «знает» общий размер файла или насколько далеко он находится в процессе загрузки - он просто показывает скорость, с которой он загружается, с общим как «Неизвестный».
Почему браузер не знает окончательный размер некоторых файлов? Откуда у него вообще эта информация?
Где действительно?
Ответы
Участник SuperUser Гроностай предлагает следующее понимание:
Для запроса документов с веб-серверов браузеры используют протокол HTTP. Возможно, вы знаете это имя из адресной строки (сейчас оно может быть скрыто, но когда вы нажмете на адресную строку, скопируете URL-адрес и вставите его в какой-нибудь текстовый редактор, вы увидите
http: //с начала). Это простой текстовый протокол, который работает следующим образом:Сначала ваш браузер подключается к серверу веб-сайта и отправляет URL-адрес документа, который он хочет загрузить (веб-страницы также являются документами), а также некоторые сведения о самом браузере ( Пользователь-агент так далее). Например, чтобы загрузить главную страницу на сайте SuperUser,
хттп://суперусер.ком/, мой браузер отправляет запрос, который выглядит следующим образом:GET / HTTP / 1.1 Хост: superuser.com Подключение: keep-alive Принять: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8 Пользовательский агент: Mozilla / 5.0 (Windows NT 6.1; WOW64) Принятие кодировки: 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: Вт, 09 июл 2013 07:14:17 GMTВ первой строке указывается, какой документ должен вернуть сервер. Остальные строки называются заголовками; они выглядят так:
Имя заголовка: значение заголовкаЭти строки отправляют дополнительную информацию, которая помогает серверу решить, что делать.
Если все в порядке, сервер ответит отправкой запрошенного документа. Ответ начинается со статусного сообщения, за которым следуют заголовки (с подробностями о документе) и, наконец, если все в порядке, содержание документа. Вот как выглядит ответ сервера SuperUser на мой запрос:
HTTP / 1.1 200 ОК Cache-Control: общедоступный, max-age = 60 Тип содержимого: текст / html; charset = utf-8 Истекает: Вт, 09 июл 2013 07:27:20 GMT Последнее изменение: вторник, 9 июля 2013 г., 07:26:20 GMT Варьировать: * Параметры X-Frame: SAMEORIGIN Дата: Вт, 9 июля 2013 г., 07:26:19 GMT Длина содержимого: 139672 <! DOCTYPE html> <html> [...snip...] </html>После последней строки сервер SuperUser закрывает соединение.
Первая строка (
HTTP / 1.1 200 ОК) содержит код ответа , в данном случае200 ОК. Это означает, что сервер вернет документ по запросу. Когда серверу не удается этого сделать, код будет другим: вы, наверное, видели404 Не Найдено, а также403 Запрещенотоже довольно распространено. Затем следуют заголовки.Когда браузер находит в ответе пустую строку, он знает, что все, что находится за этой строкой, является содержимым запрошенного им документа. Так что в этом случае
<! DOCTYPE html>это первая строка кода домашней страницы суперпользователя. Если бы я запрашивал документ для загрузки, вероятно, это были бы какие-то тарабарщины, потому что большинство форматов документов не читаются без предварительной обработки.Вернуться к заголовкам. Самый интересный для нас - последний,
Content-Length. Он сообщает браузеру, сколько байтов данных следует ожидать после пустой строки, поэтому в основном это размер документа, выраженный в байтах. Этот заголовок не является обязательным и может быть опущен сервером. Иногда размер документа невозможно предсказать (например, когда документ создается на лету), иногда ленивые программисты не включают его (довольно часто на сайтах загрузки драйверов), иногда веб-сайты создаются новичками, которые не знают такого заголовка.В любом случае, по любой причине, заголовок может отсутствовать. В этом случае браузер не знает, сколько данных сервер собирается отправить, и поэтому отображает размер документа как неизвестно , ожидая, пока сервер закроет соединение. И в этом причина неизвестных размеров документов.