Іноді вірний індикатор прогресу завантажень у вашому браузері (або іншому додатку) просто піднімає руки вгору і відмовляється від відображення залишкового часу завантаження. Чому це іноді забиває передбачуваний час завантаження, а іноді не повідомляє про все разом?
Сьогоднішня сесія запитань і відповідей надійшла до нас люб’язно від SuperUser - підрозділу Stack Exchange, угруповання веб-сайтів із питань та відповідей на основі спільноти.
Питання
Читач SuperUser Coldblackice хоче знати, чому його браузер не завжди вимиває бруд:
Іноді, завантажуючи файл у веб-браузері, хід завантаження не „знає” загальний розмір файлу або його відстань - він просто показує швидкість завантаження із загальною сумою як "Невідомий".
Чому браузер не знає остаточний розмір деяких файлів? Звідки вона взагалі бере цю інформацію?
Де справді?
Відповіді
Співавтор SuperUser Гроностай пропонує таке розуміння:
Щоб запитувати документи з веб-серверів, браузери використовують протокол HTTP. Можливо, ви знаєте це ім’я з адресного рядка (воно може бути приховане зараз, але коли ви клацнете адресний рядок, скопіюєте URL-адресу та вставите його в якийсь текстовий редактор, ви побачите
http: //на початку). Це простий текстовий протокол, який працює так:По-перше, ваш браузер підключається до сервера веб-сайту і надсилає URL-адресу документа, який він хоче завантажити (веб-сторінки - це теж документи), та деякі подробиці про сам браузер ( Користувач-агент тощо). Наприклад, щоб завантажити головну сторінку на сайті SuperUser,
http://superuser.com/, мій браузер надсилає запит, який виглядає так:GET / HTTP / 1.1 Ведучий: superuser.com Зв'язок: підтримувати життя Прийняти: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8 User-Agent: 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 Якщо модифіковано-з: Вівторок, 09 липня 2013 07:14:17 GMTПерший рядок визначає, який документ повинен повернути сервер. Інші рядки називаються заголовками; вони виглядають так:
Назва заголовка: значення заголовкаЦі рядки надсилають додаткову інформацію, яка допомагає серверу вирішити, що робити.
Якщо все добре, сервер відповість, надіславши запитуваний документ. Відповідь починається із повідомлення про стан, за яким слідують деякі заголовки (з деталями про документ) і, нарешті, якщо все добре, вміст документа. Ось як виглядає відповідь сервера SuperUser на мій запит:
HTTP / 1.1 200 OK Керування кешем: загальнодоступне, максимальний вік = 60 Тип вмісту: text / html; charset = utf-8 Закінчується: вівторок, 09 липня 2013 07:27:20 за Грінвичем Востаннє змінено: вівторок, 09 липня 2013 р., 07:26:20 GMT Варіант: * Параметри X-Frame: SAMEORIGIN Дата: вівторок, 09 липня 2013 р., 07:26:19 GMT Довжина вмісту: 139672 <! DOCTYPE html> <html> [...snip...] </html>Після останнього рядка сервер SuperUser перериває з'єднання.
Перший рядок (
HTTP / 1.1 200 OK) містить код відповіді , в даному випадку це200 Добре. Це означає, що сервер поверне документ за запитом. Коли серверу не вдається цього зробити, код буде чимось іншим: ви, напевно, бачили404 Не знайдено, і403 Забороненотакож є досить поширеним явищем. Потім слідують заголовки.Коли браузер знаходить у відповіді порожній рядок, він знає, що все, що перебуває за цим рядком, є вмістом запитуваного ним документа. Так і в цьому випадку
<! DOCTYPE html>- це перший рядок коду домашньої сторінки SuperUser. Якби я просив документ для завантаження, це, мабуть, були б деякі незрозумілі символи, оскільки більшість форматів документів неможливо прочитати без попередньої обробки.Повернутися до заголовків. Найцікавіший для нас - останній,
Довжина вмісту. Він повідомляє браузеру, скільки байтів даних він повинен очікувати після порожнього рядка, тому в основному це розмір документа, виражений у байтах. Цей заголовок не є обов’язковим і може бути опущений сервером. Іноді розмір документа не можна передбачити (наприклад, коли документ генерується на льоту), іноді ледачі програмісти не включають його (досить часто на сайтах завантаження драйверів), іноді веб-сайти створюють новачки, які не знають такого заголовка.У будь-якому випадку, незалежно від причини, заголовок може бути відсутнім. У цьому випадку браузер не знає, скільки даних збирається надіслати сервер, і таким чином відображає розмір документа як невідомо , чекаючи, поки сервер припинить з’єднання. І це причина невідомих розмірів документів.