Що таке 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:
Запит 1 → відповідь 1
Запит 2 → відповідь 2У HTTP/2:
Запити 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 (серверне "проштовхування")
Сервер може надіслати клієнту додаткові ресурси ще до того, як їх запитають.
Наприклад:
Клієнт → GET /index.html
Сервер → /index.html + /style.css + /script.jsТак браузер отримує все потрібне одразу, без додаткових запитів. (хоча в HTTP/3 ця можливість поступово йде зі стандарту.)
5. HTTPS - фактично обов'язковий
Хоча HTTP/2 теоретично можна використовувати без TLS, усі браузери вимагають лише HTTPS для HTTP/2-з'єднань. Шифрування стало стандартом.
4. Як це виглядає візуально
HTTP/1.1: HTTP/2:
─────────── ────────────────
Req1 → Resp1 Stream1: Req1/Resp1
Req2 → Resp2 Stream2: Req2/Resp2
Req3 → Resp3 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
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.1 | HTTP/2 |
|---|---|---|
| Формат | Текстовий | Бінарний |
| К-сть з'єднань | 1 запит = 1 з'єднання | Одне з'єднання, багато потоків |
| Мультиплексування | Немає | Є |
| Стиснення заголовків | Немає | HPACK |
| Server Push | Немає | Є |
| Пріоритет потоків | Немає | Є |
| Обов'язковий HTTPS | Ні | Фактично так |
| Швидкість | Повільніше | Швидше (на 20-40%) |
9. У двох словах
HTTP/2 - це "розумний" HTTP, який передає дані бінарно, мультиплексує потоки і мінімізує накладні витрати, роблячи сайти помітно швидшими без зміни логіки застосунків.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.