Ответ
Я работал с разными версиями HTTP, и их эволюция напрямую влияет на производительность Node.js-приложений.
**HTTP/1.1 (1997) — текущий стандарт де-факто.**
* **Основная модель:** Один запрос — один ответ на одно TCP-соединение. Для параллелизма браузеры открывают несколько соединений (обычно 6-8).
* **Ключевые фичи для Node.js:** Keep-Alive соединения (переиспользование TCP-канала), chunked transfer encoding для стриминга.
* **Проблема:** Head-of-line blocking — если первый запрос в очереди медленный, последующие ждут.
**HTTP/2 (2015) — бинарный протокол для производительности.**
* **Мультиплексирование:** Множество запросов и ответов могут передаваться параллельно в рамках **одного** TCP-соединения, решая проблему блокировки.
* **Сжатие заголовков (HPACK):** Уменьшает оверхеды.
* **Server Push:** Сервер может отправить клиенту ресурсы (например, CSS), которые, как он предсказывает, понадобятся.
* **В Node.js:** Поддержка нативно с Node.js 8.4.0+. Используется через модуль `http2`.
```javascript
const http2 = require('http2');
const server = http2.createSecureServer({ cert, key });
server.on('stream', (stream, headers) => {
stream.respond({ ':status': 200, 'content-type': 'text/html' });
stream.end('