http и https

Тема дорожной карты · Node.js

Модули http и https — это встроенные модули Node.js, предоставляющие низкоуровневые API для создания веб-серверов и выполнения исходящих HTTP/HTTPS-запросов непосредственно в JavaScript-среде выполнения, без каких-либо дополнительных npm-зависимостей. http.createServer((req, res) => { ... }) создаёт HTTP-сервер, вызывающий переданный колбэк для каждого входящего запроса и обеспечивающий полный доступ к заголовкам, методу, URL и телу запроса через поток req, а также управление ответом через объект res. Модуль https повторяет API http, но требует настройки TLS-сертификатов (параметры key, cert, ca) для обслуживания трафика по зашифрованным соединениям; на практике большинство продакшн-развёртываний Node.js завершает TLS на обратном прокси или балансировщике нагрузки, а серверное приложение Node.js работает по обычному HTTP внутри сети. Выполнение исходящих запросов через http.request() или https.request() — это самый низкоуровневый доступный вариант, однако большинство серверных разработчиков Node.js предпочитают npm-пакеты более высокого уровня — axios, got или встроенный fetch API (доступен начиная с Node.js 18) — для обращения к внешним HTTP API. Понимание модулей http и https является важным фундаментальным знанием для серверных разработчиков Node.js, даже при использовании фреймворков вроде Express.js, абстрагирующих создание сырого сервера.

Как это работает

http и https идёт с runtime — без установки. Основные: fs (файловая система, sync и promise API), path (кросс-платформенная сборка путей), http/https (серверы и клиенты), crypto (хеширование, шифры, randomBytes), os (системная информация), events (базовый EventEmitter), child_process (spawn/fork), stream (readable/writable), url, querystring, util, assert. У большинства есть callback и node:-prefixed promise-альтернатива в современных версиях.

Когда применять

Сначала core-модули, потом зависимость — они закрывают большинство задач без supply-chain риска. fs/promises покрывает 90% file I/O; crypto.randomUUID() делает uuid-библиотеки ненужными; URL (WHATWG) заменяет url.parse(). Префикс node: (require("node:fs")) для ясности в ESM. Promise API лучше callback в новом коде; legacy callback всё ещё нужен для streams.

Типичные ошибки

Ловушки http и https: sync fs (readFileSync) в обработчиках запросов (блокирует event loop); конкатенация строк вместо path.join (Windows-backslash); Math.random() для криптографии (нужен crypto.randomBytes); не пробрасывают AbortSignal — HTTP-клиенты текут после отмены. Прочтите Node API docs страницу за страницей — половина мыслей "не хватает библиотеки" исчезает.

Связанные понятия

Полезные ресурсы