Назад к вопросам
Middle
127
questionbank

Можем ли мы запустить HTTP/2 без использования HTTPS?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Да, можем, но это не рекомендуется для продакшена.

HTTP/2 может работать поверх TCP как без шифрования (cleartext HTTP/2), так и в зашифрованном виде (HTTP/2 over TLS).

Основные причины, почему cleartext HTP/2 редки и не рекомендованы:

  1. Совместимость с браузерами: Большинство современных браузеров (Chrome, Firefox, Edge и др.) поддерживают HTTP/2 только поверх TLS. Это связано с тем, что существующая инфраструктура (промежуточные прокси, брандмауэры) может некорректно обрабатывать HTTP/2 без TLS, используя старые механизмы согласования протокола (например, Upgrade-хидер). Переход на HTTP/2 over TLS (через ALPN) более надежен.
  2. Безопасность: HTTP/2, как и HTTP/1.1, чувствителен к атакам типа "Man-in-the-Middle". TLS обеспечивает целостность и конфиденциальность данных.
  3. Стандартизация: Хотя стандарт HTTP/2 (RFC 7540) описывает оба варианта, де-факто стандартом стала реализация поверх TLS.

Технически, для запуска cleartext HTTP/2 на сервере Node.js можно использовать модули, поддерживающие эту функциональность (например, встроенный http2 с опцией allowHTTP1 или сторонние библиотеки, если требуется более низкоуровневый контроль).

Пример минимального сервера на Node.js с cleartext HTTP/2:

const http2 = require('http2');

const server = http2.createServer(); // По умолчанию создает cleartext HTTP/2 сервер

server.on('stream', (stream, headers) => {
  // Обработка входящего HTTP/2 потока

  stream.respond({
    ':status': 200,
    'content-type': 'text/plain',
  });

  stream.end('Привет, это cleartext HTTP/2!');
});

server.listen(8080, () => {
  console.log('Cleartext HTTP/2 сервер запущен на порту 8080');
});

Однако, такой сервер не будет доступен по HTTP/2 из большинства стандартных браузеров без дополнительных настроек (например, принудительного использования h2c через специальные тулы или нестандартное ПО).

В продакшене всегда следует использовать HTTP/2 поверх TLS (HTTPS) для совместимости, безопасности и надежного согласования протокола с клиентами.