← Cloudflare Workers / workers / runtime-apis / nodejs
https
Флаги совместимости
Клиентские методы
Чтобы использовать клиентские методы HTTPS (https.get, https.request, и т. д.), необходимо включить enable_nodejs_http_modules флаг совместимости в дополнение к nodejs_compat флаг.
Этот флаг автоматически включается для Workers, использующих дата совместимости 2025-08-15 или более поздней версии, когда nodejs_compat включен. Для Workers с более ранней датой совместимости его можно включить вручную, добавив флаг в wrangler.toml:
compatibility_flags = ["nodejs_compat", "enable_nodejs_http_modules"]Серверные методы
Чтобы использовать серверные методы HTTPS (https.createServer, https.Server, https.ServerResponse), необходимо включить enable_nodejs_http_server_modules флаг совместимости в дополнение к nodejs_compat флаг.
Этот флаг автоматически включается для Workers, использующих дата совместимости 2025-09-01 или более поздней версии, когда nodejs_compat включен. Для Workers с более ранней датой совместимости его можно включить вручную, добавив флаг в wrangler.toml:
compatibility_flags = ["nodejs_compat", "enable_nodejs_http_server_modules"]Чтобы использовать методы и на стороне клиента, и на стороне сервера, включите оба флага:
compatibility_flags = ["nodejs_compat", "enable_nodejs_http_modules", "enable_nodejs_http_server_modules"]get
Реализация Node.js `https.get' ↗ метод.
get метод выполняет GET-запрос по указанному URL и вызывает callback-функцию с ответом. Это вспомогательный метод, упрощающий выполнение HTTPS GET-запросов без ручной настройки параметров запроса.
Поскольку get представляет собой обёртку над fetch(...), его можно использовать только внутри экспортированного обработчика fetch или аналогичного. Вне такого обработчика попытки использовать get выбросит ошибку.
import { get } from "node:https";
export default {
async fetch() {
const { promise, resolve, reject } = Promise.withResolvers();
get("https://example.com", (res) => {
let data = "";
res.setEncoding("utf8");
res.on("data", (chunk) => {
data += chunk;
});
res.on("end", () => {
resolve(new Response(data));
});
res.on("error", reject);
}).on("error", reject);
return promise;
},
};Реализация get в Workers представляет собой обёртку вокруг глобального
fetch API ↗
и поэтому подпадает под те же ограничения ↗.
Как показано в примере выше, необходимо обеспечить корректное
ожидание запросов в fetch обработчика с помощью promise, иначе fetch может быть преждевременно отменен
после того, как обработчик завершит выполнение.
запрос
Реализация Node.js `https.request' ↗ метод.
request метод создаёт HTTPS-запрос с настраиваемыми параметрами, такими как метод, заголовки и тело. Он даёт полный контроль над конфигурацией запроса и возвращает Node.js stream.Writable ↗ для отправки данных запроса.
Поскольку get представляет собой обёртку над fetch(...), его можно использовать только внутри экспортированного обработчика fetch или аналогичного. Вне такого обработчика попытки использовать get выбросит ошибку.
Метод запроса принимает все параметры из http.request с некоторыми отличиями в значениях по умолчанию:
protocol: по умолчаниюhttps:port: по умолчанию443agent: по умолчаниюhttps.globalAgent
import { request } from "node:https";
import { strictEqual, ok } from "node:assert";
export default {
async fetch() {
const { promise, resolve, reject } = Promise.withResolvers();
const req = request(
"https://developers.cloudflare.com/robots.txt",
{
method: "GET",
},
(res) => {
strictEqual(res.statusCode, 200);
let data = "";
res.setEncoding("utf8");
res.on("data", (chunk) => {
data += chunk;
});
res.once("error", reject);
res.on("end", () => {
ok(data.includes("User-agent"));
resolve(new Response(data));
});
},
);
req.end();
return promise;
},
};Следующие дополнительные параметры не поддерживаются: ca, cert, ciphers, clientCertEngine (устарело), crl, dhparam, ecdhCurve, honorCipherOrder, key, passphrase, pfx, rejectUnauthorized, secureOptions, secureProtocol, servername, sessionIdContext, highWaterMark.
createServer
Реализация Node.js https.createServer ↗ метод.
createServer метод создаёт экземпляр HTTPS-сервера, способный обрабатывать входящие защищённые запросы. Это вспомогательная функция, которая создаёт новый Server экземпляр и при необходимости настраивает функцию обратного вызова для обработки запроса.
import { createServer } from "node:https";
import { httpServerHandler } from "cloudflare:node";
const server = createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/plain" });
res.end("Hello from Node.js HTTPS server!");
});
server.listen(8080);
export default httpServerHandler({ port: 8080 }); httpServerHandler функция интегрирует HTTPS-серверы Node.js с моделью запросов Cloudflare Workers. Когда запрос поступает в ваш Worker, обработчик автоматически направляет его на сервер Node.js, работающий на указанном порту. Этот мост позволяет использовать привычные шаблоны серверов Node.js и одновременно пользоваться преимуществами среды выполнения Workers, включая автоматическое масштабирование, развёртывание на периферии и интеграцию с другими сервисами Cloudflare.
Agent
Реализация Node.js https.Agent ↗ в качестве класса.
Одна Agent ↗ управляет повторным использованием HTTPS-соединений, поддерживая очереди запросов для каждого хоста и порта. Однако в среде Workers такое низкоуровневое управление сетевым соединением, портами и прочим не имеет значения, поскольку этим занимается инфраструктура Cloudflare. Поэтому реализация Agent в Workers представляет собой заглушку, которая не поддерживает пул соединений или keep-alive.
Сервер
Реализация Node.js https.Server ↗ в качестве класса.
В Node.js https.Server класс представляет HTTPS сервер и предоставляет методы для обработки входящих защищённых запросов. В Workers обработку защищённых запросов обеспечивает инфраструктура Cloudflare, поэтому разница между использованием https.Server или http.Server. Среда выполнения Workers предоставляет свою реализацию для полноты картины, но в большинстве случаев Workers стоит просто использовать http.Server.
import { Server } from "node:https";
import { httpServerHandler } from "cloudflare:node";
const server = new Server((req, res) => {
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: "Hello from HTTPS Server!" }));
});
server.listen(8080);
export default httpServerHandler({ port: 8080 });Между реализацией в Workers и Node.js существуют следующие различия:
- Методы управления соединением, такие как
closeAllConnections()иcloseIdleConnections()не реализованы из-за особенностей среды Workers. - Только
listen()поддерживаются варианты с номером порта или без параметров:listen(),listen(0, callback),listen(callback), и т. д. - Следующие серверные параметры не поддерживаются:
maxHeaderSize,insecureHTTPParser,keepAliveTimeout,connectionsCheckingInterval - Специфичные для TLS/SSL параметры, такие как
ca,cert,key,pfx,rejectUnauthorized,secureProtocolне поддерживаются в среде Workers. Если вам нужно использовать mTLS, используйте привязка mTLS.
Другие различия между Node.js и Workers в реализации node:https
Поскольку в Workers реализация node:https представляет собой обёртку над глобальным fetch API есть отличия в поведении по сравнению с Node.js:
Connectionзаголовки не используются. Workers будет управлять соединениями автоматически.Content-Lengthзаголовки будут обрабатываться так же, как вfetchAPI. Если указано тело запроса, заголовок устанавливается автоматически, а значения, заданные вручную, игнорируются.Expect: 100-continueзаголовки не поддерживаются.- Завершающие заголовки не поддерживаются.
-
'continue'событие не поддерживается. -
'information'событие не поддерживается. -
'socket'событие не поддерживается. -
'upgrade'событие не поддерживается. - Получение прямого доступа к базовой
socketне поддерживается. - Настройка специфичных для TLS параметров, таких как
ca,cert,key,rejectUnauthorized, и т. д. не поддерживается.