INTEGRITY Документация

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 с некоторыми отличиями в значениях по умолчанию:

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 существуют следующие различия:

Другие различия между Node.js и Workers в реализации node:https

Поскольку в Workers реализация node:https представляет собой обёртку над глобальным fetch API есть отличия в поведении по сравнению с Node.js: