Коротка відповідь
juniorHTTP/1.0 — це перша офіційна версія протоколу, що підтримує статичні запити. HTTP/1.1 — розширення з persistent connections, pipelining і chunked encoding. HTTP/2 — двійковий протокол з multiplexing, header compression і server push.
Повне пояснення
Що це і навіщо HTTP (HyperText Transfer Protocol) – протокол прикладного рівня, що забезпечує обмін даними між клієнтом і сервером у веб‑середовищі. Кожна версія вводить нові можливості, покращуючи продуктивність і зручність.
Ключові принципи/терміни
- Persistent connection – збереження TCP‑з’єднання після одного запиту.
- Pipelining – надсилання кількох запитів без очікування відповідей.
- Chunked encoding – розбиття відповіді на частини, коли довжина невідома.
- Multiplexing – одночасна передача кількох потоків даних по одному TCP‑з’єднанню.
- Header compression – зменшення розміру заголовків у HTTP/2.
- Server push – сервер може надсилати ресурси до клієнта без явного запиту.
Як це працює
- Клієнт відкриває TCP‑з’єднання.
- Відправляє HTTP‑запит (метод, URL, заголовки).
- Сервер обробляє запит і повертає HTTP‑відповідь.
- У HTTP/1.1 з’єднання залишається відкритим, що дозволяє надсилати наступні запити без повторного встановлення TCP‑з’єднання.
- У HTTP/2 використовується двійковий формат, що дозволяє одночасно передавати кілька запитів/відповідей по одному з’єднанню.
Практика і реалізація
- У Node.js можна створити сервер HTTP/1.1 за допомогою модуля
http:
const http = require('http');
http.createServer((req, res) => {
res.end('Hello');
}).listen(3000);
- Для HTTP/2 використовується модуль
http2:
const http2 = require('http2');
const server = http2.createServer();
server.on('stream', (stream) => {
stream.respond({ 'content-type': 'text/plain' });
stream.end('Hello');
});
server.listen(3000);
Тестування
- Unit: перевірка правильності формування заголовків за допомогою Jest.
- Integration: використання
supertestдля тестування HTTP‑запитів до локального сервера. - E2E:
Playwrightможе виконувати запити і перевіряти відповіді.
Безпека та приватність
- Використання HTTPS (TLS) над HTTP/1.1 і HTTP/2 забезпечує шифрування.
- У HTTP/2 заборонено одразу відкривати нові TCP‑з’єднання, що зменшує ризик атак типу "slowloris".
Оптимізація та edge cases
- У HTTP/1.1 важливо закривати
Connection: close, коли не потрібна persistent connection. - У HTTP/2 слід уникати надмірного використання server push, оскільки це може збільшити навантаження.
Часті помилки
- Неправильне використання
Transfer-Encoding: chunkedу HTTP/1.1. - Відсутність підтримки
ALPNпри налаштуванні TLS для HTTP/2.
Cheatsheet
- HTTP/1.0: один запит → одне з’єднання.
- HTTP/1.1: persistent connection, pipelining, chunked encoding.
- HTTP/2: multiplexing, header compression, server push, двійковий формат.