Skip to main content

Що таке HTTP/2?

1. Що таке HTTP/2

HTTP/2 - це друга основна версія протоколу HTTP, розроблена IETF і випущена в 2015 році.

Вона створювалася з метою:

  • підвищити швидкість завантаження веб-сторінок,
  • зменшити затримки,
  • скоротити кількість TCP-з'єднань,
  • і зробити протокол ефективнішим.

Простіше кажучи: HTTP/2 = той самий HTTP, але "упакований" розумніше. Семантика (GET, POST, headers, status codes) лишилася незмінною, але формат передачі даних і будова з'єднання змінилися радикально.

2. Чому HTTP/1.1 почав гальмувати

HTTP/1.1 (1997 р.) мав низку проблем:

  • Обмеження: 1 запит = 1 відповідь. Щоб завантажити 50 ресурсів (картинки, скрипти, CSS), потрібно відкрити десятки з'єднань.
  • Head-of-Line Blocking - якщо один запит у черзі завис, решта чекають.
  • Величезні заголовки (cookies, user-agent тощо) передаються заново в кожному запиті.
  • Немає мультиплексування: кожне з'єднання обслуговує лише один потік.
  • Щоб пришвидшити сайт, доводилося "хакати" протокол - мінімізувати CSS, об'єднувати JS, використовувати CDN-домени.

3. Що змінилося в HTTP/2

1. Мультиплексування (Multiplexing)

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

У HTTP/1.1:

javascript
Запит 1 → відповідь 1 Запит 2 → відповідь 2

У HTTP/2:

javascript
Запити 1, 2, 3 → паралельно Відповіді 1, 2, 3 → у будь-якому порядку

Це усуває Head-of-Line Blocking на рівні HTTP (але не TCP).

2. Бінарний формат (Binary framing)

HTTP/2 передає дані в бінарних фреймах, а не текстом, як HTTP/1.1.

  • Швидше парситься і компактніше.
  • Усуває неоднозначності текстового формату.
  • Розділяє потік на незалежні frames і streams.

3. Стиснення заголовків (HPACK)

Заголовки (User-Agent, Cookie, Accept-Language тощо) часто повторюються. HTTP/2 кодує їх за допомогою таблиці й Huffman-стиснення, зменшуючи обсяг метаданих, що передаються.

Наприклад, 1 КБ заголовків у HTTP/1.1 може займати всього ~100 байт у HTTP/2.

4. Server Push (серверне "проштовхування")

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

Наприклад:

javascript
Клієнт → GET /index.html Сервер → /index.html + /style.css + /script.js

Так браузер отримує все потрібне одразу, без додаткових запитів. (хоча в HTTP/3 ця можливість поступово йде зі стандарту.)

5. HTTPS - фактично обов'язковий

Хоча HTTP/2 теоретично можна використовувати без TLS, усі браузери вимагають лише HTTPS для HTTP/2-з'єднань. Шифрування стало стандартом.

4. Як це виглядає візуально

javascript
HTTP/1.1: HTTP/2: ─────────── ──────────────── Req1Resp1 Stream1: Req1/Resp1 Req2Resp2 Stream2: Req2/Resp2 Req3Resp3 Stream3: Req3/Resp3 (по черзі) (усе через одне з'єднання)

5. Приклад різниці в продуктивності

HTTP/1.1: браузер відкриває до 6 TCP-з'єднань на один домен, кожне - з окремою чергою запитів.

HTTP/2: одне з'єднання обслуговує десятки паралельних потоків. → менше overhead, менше затримок, менше рукостискань.

Результат:

  • сторінки завантажуються швидше;
  • менше навантаження на сервер і мережу;
  • більше вигоди від HTTPS (TLS використовується ефективніше).

6. Підтримка

HTTP/2 підтримується:

  • усіма сучасними браузерами;
  • більшістю серверів (Nginx, Apache, Node.js, Caddy, Cloudflare тощо);
  • починаючи з Node.js v8.4 (import http2 from 'node:http2').

7. Приклад у Node.js

javascript
import http2 from 'node:http2'; import fs from 'node:fs'; const server = http2.createSecureServer({ key: fs.readFileSync('key.pem'), cert: fs.readFileSync('cert.pem'), }); server.on('stream', (stream, headers) => { stream.respond({ 'content-type': 'text/plain', ':status': 200 }); stream.end('Hello from HTTP/2'); }); server.listen(8443);

8. Ключові відмінності в таблиці

ХарактеристикаHTTP/1.1HTTP/2
ФорматТекстовийБінарний
К-сть з'єднань1 запит = 1 з'єднанняОдне з'єднання, багато потоків
МультиплексуванняНемаєЄ
Стиснення заголовківНемаєHPACK
Server PushНемаєЄ
Пріоритет потоківНемаєЄ
Обов'язковий HTTPSНіФактично так
ШвидкістьПовільнішеШвидше (на 20-40%)

9. У двох словах

HTTP/2 - це "розумний" HTTP, який передає дані бінарно, мультиплексує потоки і мінімізує накладні витрати, роблячи сайти помітно швидшими без зміни логіки застосунків.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.