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

    Чому мій веб-браузер іноді не відображає залишкові часи завантаження?

    Іноді вірний вимірювач прогресу завантаження у вашому браузері (або іншій програмі) просто кидає руки в повітря і відмовляється від відображення часу, що залишився. Чому він іноді прибиває прогнозований час завантаження і іноді не в змозі повідомити про це все разом?

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

    Питання

    Читач SuperUser Coldblackice хоче знати, чому у своєму браузері не завжди їсть бруд:

    Іноді, завантажуючи файл у веб-переглядачі, прогрес завантаження не "знає" загальний розмір файлу, або наскільки далеко у завантаженні він - він просто показує швидкість, з якою завантажується, із загальним як "Невідомо".

    Чому браузер не знає остаточного розміру деяких файлів? Де вона отримує цю інформацію в першу чергу?

    Де дійсно?

    Відповіді

    Співробітник SuperUser Gronostaj пропонує наступну інформацію:

    Щоб запитувати документи з веб-серверів, браузери використовують протокол HTTP. Ви можете знати це ім'я з адресного рядка (він може бути прихований зараз, але коли ви натискаєте адресний рядок, скопіюйте URL-адресу та вставте його в якийсь текстовий редактор, ви побачите http: // на початку). Це простий текстовий протокол і працює так:

    По-перше, ваш браузер підключається до сервера веб-сайту і надсилає URL-адресу документа, який він хоче завантажити (веб-сторінки також є документами) і деякі деталі про сам браузер (User-Agent і т.д.). Наприклад, щоб завантажити головну сторінку на сайті 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 Прийняти-мова: pl-PL, pl; q = 0.8, en-US; q = 0.6, en; q = 0.4 Cookie: [вилучено для безпеки] DNT : 1 If-Modified-З: Tue, 09 Jul 2013 07:14:17 GMT 

    Перший рядок вказує, який документ повинен повертати сервер. Інші рядки називаються заголовками; вони виглядають так:

    Назва заголовка: значення заголовка 

    Ці рядки надсилають додаткову інформацію, яка допомагає серверу вирішити, що робити.

    Якщо все добре, сервер відповість, надіславши запитаний документ. Відповідь починається з повідомлення про стан, за яким слідують деякі заголовки (з деталями про документ) і, нарешті, якщо все добре, вміст документа. Саме так відповідь сервера SuperUser для мого запиту виглядає так:

    HTTP / 1.1 200 OK Кеш керування: public, max-age = 60 Content-Type: text / html; charset = utf-8 Завершується: Tue, 09 Jul 2013 07:27:20 GMT Останні зміни: Tue, 09 Jul 2013 07:26:20 GMT Вари: * X-Frame-Options: SAMEORIGIN Дата: Tue, 09 Jul 2013 07:26:19 GMT Зміст-довжина: 139672 [… snip…]  

    Після останнього рядка сервер SuperUser закриває з'єднання.

    Перший рядок (HTTP / 1.1 200 OK) містить код відповіді, в даному випадку це 200 OK. Це означає, що сервер поверне документ, як просив. Коли сервер не встигне зробити це, код буде щось інше: ви, напевно, бачили 404 Не знайдено, і 403 Заборонено це досить поширене явище. Далі йдуть заголовки.

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

    Назад до заголовків. Найбільш цікавим для нас є останній, Довжина вмісту. Він інформує браузер, скільки байт даних слід очікувати після порожнього рядка, тому в основному це розмір документа, виражений в байтах. Цей заголовок не є обов'язковим і може бути пропущений сервером. Іноді розмір документа не може бути передбачений (наприклад, коли документ створюється на льоту), іноді ліниві програмісти не включають його (досить часто на сайтах завантаження драйверів), іноді сайти створюються новичками, які не знають такого заголовка.

    У всякому разі, незалежно від причини, заголовок може бути відсутній. У цьому випадку браузер не знає, скільки даних буде надсилати сервер, і таким чином відображає розмір документа невідомо, очікування сервера закриє з'єднання. І це причина невідомих розмірів документа.


    Маєте щось додати до пояснення? Звучить в коментарях. Хочете прочитати більше відповідей від інших технологічних користувачів Stack Exchange? Перегляньте повний потік обговорення тут.