Протокол HTTP/2: що це, переваги та як ним користуватися

Що таке HTTP

HTTP — це протокол, на підставі якого передаються дані в інтернеті. HTTP будується на моделі клієнт/сервер. У такій моделі два комп’ютери, клієнт (той, хто отримує послугу) та сервер (провайдер послуги) спілкуються між собою за допомогою запитів та відповідей.

Цю модель можна пояснити на прикладі гостя у ресторані та офіціанта. Гість (клієнт) замовляє (надсилає запит) в офіціанта (сервера) їжу. Офіціант йде за їжею до кухаря (логіка вашого додатку) та приносить її гостеві. Це дуже простий приклад, але він допоможе вам зрозуміти концепт.

Тепер поговоримо про протокол HTTP/2.

Протокол HTTP/2: переваги та як ним користуватися Що таке HTTP/2

У 2015 році робоча група інженерів інтернету випустила HTTP/2, другу глобальну версію протоколу HTTP.

Основні цілі розробки HTTP/2:

  • Можливість вибирати протокол, наприклад, HTTP/1.1, HTTP/2 чи інший.
  • Висока сумісність з HTTP/1.1 — методи, коди статусів, поля хедерів.
  • Поліпшення швидкості завантаження завдяки стисненню хедерів запитів, бінарному протоколу, надсиланню даних з ініціативи сервера, блокуванню пакетів та запиту багаторазової передачі даних.

Запит багаторазової передачі даних

HTTP/2 може надсилати множинні запити даних паралельно по єдиному з’єднанню TCP. Це просунута функція протоколу HTTP/2. З її допомогою можна завантажувати вебфайли асинхронно з одного сервера. Більшість сучасних браузерів обмежує кількість TCP-підключень до одного сервера.

Відмінність між протоколами HTTP 1.1 та HTTP/2

Відмінність між протоколами HTTP 1.1 та HTTP/2

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

Стиснення хедерів

HTTP/2 стискає велику кількість непотрібних кадрів хедерів. Для цього протокол використовує специфікацію HPACK. Клієнт та сервер підтримують список хедерів, які використовувалися у попередніх запитах клієнта-сервера.

HPACK стискає окреме значення кожного хедера до передачі на сервер, а потім дивиться закодовану інформацію в списку попередньо переданих значень хедера для повної реконструкції даних хедера.

Приклад стиснення хедерів за допомогою технології HPACK

Приклад стиснення хедерів за допомогою технології HPACK

Бінарний протокол

Ця версія протоколу може перетворювати текстовий протокол на бінарний. HTTP1.x обробляв текстові команди, щоб завершувати цикл запитів-відповідей. Протокол HTTP/2 використовує бінарні команди для виконання тих самих завдань. Це полегшує фреймінг та виконання команд.

Переваги:

  • Низькі витрати на парсинг даних,
  • Менше помилок,
  • Менше навантаження на мережу,
  • Ефективне використання мережевих ресурсів,
  • Дає можливість використовувати додаткові переваги HTTP/2, такі як стиснення, багаторазову передачу даних, пріоритезацію та ефективну обробку TLS,
  • Компактна презентація команд для більш легкої обробки та впровадження,
  • Більш ефективна обробка даних між клієнтом та сервером,
  • Менше мережевих затримок.

Надсилання даних з ініціативи сервера

Ця опція дозволяє серверу відправляти додаткову кешовану інформацію клієнту, яка зараз не запитується, але може бути запитана в майбутньому. Наприклад, клієнт запитує ресурс X. Сервер розуміє, що ресурс Y пов’язаний із запитуваним файлом. Тому сервер може надіслати Y разом з X і не чекати на такий запит від клієнта.

Приклад надсилання даних з ініціативи сервера

Приклад надсилання даних з ініціативи сервера

Переваги

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

Повернемося до історії про гостя в ресторані та офіціанті. Уявимо, що офіціанти — це TCP-підключення, і ви хочете замовити вечерю та пляшку води. Для версії HTTP/1.1 це означатиме, що ви попросити у одного офіціанта вечерю, а у другого воду, тобто у вас буде два TCP-підключення. Для версії HTTP/2 ви попросите обидві речі одного офіціанта, але він доставить вам їх окремо. У вас буде одне TCP-підключення та менше навантаження на сервер. Крім того, сервер має одне зайве підключення (офіціант) для наступного клієнта (гостя).

Фундаментальну різницю між протоколами HTTP/1.1 та HTTP/2 видно на прикладі надсилання даних з ініціативи сервера.

Уявіть, що гість (клієнт) замовляє (відправляє запит) в офіціанта (серверу) вечерю. Офіціант бере вечерю у кухаря (логіка вашої програми), але офіціант також подумав про те, що швидше за все вам знадобиться вода. Тому він приносить її разом із вечерею. У результаті у вас буде лише одне TCP-підключення та один запит, що значно знижує навантаження на сервер.

Щоб продемонструвати цю механіку, візьмемо приклад такої сторінки:

Сторінка зі 100 картинками зелених галочок для прикладу

Сторінка зі 100 картинками зелених галочок для прикладу

Це звичайна сторінка зі 100 картинками зелених галочок. Ми будемо використовувати її, щоб показати відправлення даних з ініціативи сервера протоколами HTTP/1.1, HTTP/2 та HTTP/2.

На що важливо звертати увагу на малюнку нижче — кількість запитів, час завантаження, колонку протоколу, колонку ініціатора та діаграму.

Для HTTP/1.1

Приклад обробки картинки зі 100 галочками протоколом HTTP/1.1 Приклад обробки картинки зі 100 галочками протоколом HTTP/1.1

Кількість запитів: 102
Час завантаження: 12, 97 секунд
Протокол: “http/1.1”
Колонка ініціатора: Ініціатор першого запиту — користувач/клієнт, і частина запитів, що залишилася, ініціюються клієнтом, який розуміє, що йому потрібні додаткові ресурси (у цьому випадку картинки).
Діаграма: ми можемо бачити, як запити обробляються множинними пачками (TCP-підключення).

Для HTTP/2

Приклад обробки картинки зі 100 галочками протоколом HTTP/2 Приклад обробки картинки зі 100 галочками протоколом HTTP/2

Кількість запитів: 102
Час завантаження: 11,19 секунд
Протокол : “h2” (HTTP/2)
Колонка ініціатора: Ініціатор першого запиту — користувач/клієнт, і частина запитів, що залишилася, ініціюються клієнтом, який розуміє, що йому потрібні додаткові ресурси (у цьому разі картинки).
Діаграма: ми можемо бачити, як запити обробляються двома пачками (TCP-підключення). Зверніть увагу на час завантаження. В цьому випадку він трохи нижче, ніж час завантаження у прикладі HTTP/1.1, але це не завжди так.

Надсилання даних з ініціативи сервера HTTP/2

Обробка картинки зі 100 галочками за допомогою надсилання даних з ініціативи сервера Обробка картинки зі 100 галочками за допомогою відправки даних з ініціативи сервера

Кількість запитів: 102
Час завантаження: 3,17 секунд
Протокол: “h2” (HTTP/2)
Колонка ініціатора: Ініціатор першого запиту — користувач/клієнт, і частина запитів, що залишилася, ініціюються сервером (один запит/цикл відповіді)
Діаграма: бачимо, як запити обробляються з допомогою одного TCP-підключення.

Сумісність із браузерами

Сумісність із браузерами

Більшість сучасних браузерів повністю підтримують протокол HTTP/2 за винятком (позначено червоним) Opera mini Усіх версій та браузера UC під Android.

Також деякі браузери підтримують HTTP/2 частково (позначені світло-зеленим), наприклад, IE11.

Докладніше про підтримку браузерів протоколу HTTP/2

Як можна почати використовувати HTTP/2

Крок 1

  • Переконайтеся, що ви використовуєте HTTPS: купіть SSL або TLS сертифікат від офіційного центру сертифікації або використовуйте безплатний SSL від Let’s Encrypt.
  • Активуйте SSL-сертифікат.
  • Встановіть його.
  • Перезапустіть сайт, щоб активувати протокол HTTPS.
Встановіть SSL-сертифікат і захистіть свій сайт!

Крок 2

Переконайтеся, що мережева інфраструктура, включно з сервером, підтримує HTTP/2. Сервери Nginx підтримують HTTP/2 за умовчанням, тоді як Apache додав підтримку HTTP/2 у жовтні 2015. Це означає, що серверам Apache можуть знадобитися додаткові модулі, щоб увімкнути передачу даних за допомогою HTTP/2.

Крок 3

Оновіть, налаштуйте та протестуйте сервери, щоб вони підтримували HTTP/2.

Налаштування та тестування для серверів Apache

Зв’яжіться з вашим хостинг-провайдером, щоб переконатися, що HTTP/2 працює для вашого сайту.

Джерела: стаття в блозі Kinsta, стаття в Medium

Валерия

Керую контент-напрямком, працюю у сфері маркетингу та редактури 4 роки.