HTTPS のクライアント側メソッド(https.get、https.request など)を使うには、nodejs_compat フラグに加えて enable_nodejs_http_modules 互換性フラグを有効にする必要があります。
このフラグは、nodejs_compat が有効で、互換性日付 が 2025-08-15 以降の Worker では自動で有効になります。それより前の互換性日付を使う Worker では、wrangler.toml にフラグを追加して手動で有効にできます。
compatibility_flags = ["nodejs_compat", "enable_nodejs_http_modules"]HTTPS のサーバー側メソッド(https.createServer、https.Server、https.ServerResponse)を使うには、nodejs_compat フラグに加えて enable_nodejs_http_server_modules 互換性フラグを有効にする必要があります。
このフラグは、nodejs_compat が有効で、互換性日付 が 2025-09-01 以降の Worker では自動で有効になります。それより前の互換性日付を使う Worker では、wrangler.toml にフラグを追加して手動で有効にできます。
compatibility_flags = ["nodejs_compat", "enable_nodejs_http_server_modules"]クライアント側とサーバー側の両方のメソッドを使う場合は、両方のフラグを有効にします。
compatibility_flags = ["nodejs_compat", "enable_nodejs_http_modules", "enable_nodejs_http_server_modules"]Node.js の https.get ↗ メソッドの実装です。
get は指定した URL へ GET リクエストを送り、レスポンスをコールバックに渡します。リクエストオプションを手で設定せずに 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;
},
};Workers での get の実装は、グローバルな fetch API ↗ のラッパーです。そのため、同じ 制限 ↗ が適用されます。
上の例のとおり、fetch ハンドラー内ではプロミスなどでリクエストの完了を待つ必要があります。待たないと、ハンドラーが return した時点で fetch が途中でキャンセルされることがあります。
Node.js の https.request ↗ メソッドの実装です。
request は、メソッド、ヘッダー、本文などのオプションを指定して HTTPS リクエストを作成します。リクエスト設定を細かく制御でき、リクエストデータを送るための Node.js stream.Writable ↗ を返します。
request は fetch(...) のラッパーのため、エクスポートした fetch ハンドラー(または同等のハンドラー)の中でのみ使えます。そのようなハンドラーの外で request を使うとエラーになります。
request メソッドは 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。
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 関数は、Node.js の HTTPS サーバーを Cloudflare Workers のリクエストモデルに接続します。Worker にリクエストが届くと、ハンドラーは指定したポートで動いている Node.js サーバーへ自動でルーティングします。この橋渡しにより、使い慣れた Node.js のサーバーパターンを使いつつ、自動スケーリング、エッジへのデプロイ、ほかの Cloudflare サービスとの連携といった Workers ランタイムの利点を得られます。
Node.js の https.Agent ↗ クラスの実装です。
Agent ↗ は、ホスト/ポートごとにリクエストキューを持ち、HTTPS 接続の再利用を管理します。ただし Workers 環境では、ネットワーク接続やポートなどの低レベル管理は Cloudflare のインフラが行うため、この層は関係しません。そのため、Workers の Agent はスタブ実装であり、コネクションプーリングや keep-alive はサポートしません。
Node.js の https.Server ↗ クラスの実装です。
Node.js では、https.Server クラスは HTTPS サーバーを表し、受信したセキュアなリクエストを処理するメソッドを提供します。Workers ではセキュアなリクエストの処理は Cloudflare のインフラが行うため、https.Server と http.Server に大きな違いはありません。完全性のためにランタイムは実装を提供しますが、ほとんどの Worker では 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 ca、cert、key、pfx、rejectUnauthorized、secureProtocolなどの TLS/SSL 固有オプションは、Workers 環境ではサポートしていません。mTLS が必要な場合は mTLS バインディング を使います。
Workers の node:https 実装はグローバルな fetch API のラッパーです。そのため、Node.js と比べて次の挙動の違いがあります。
Connectionヘッダーは使いません。接続は Workers が自動管理します。Content-Lengthヘッダーの扱いはfetchAPI と同じです。本文がある場合はヘッダーが自動設定され、手動で設定した値は無視されます。Expect: 100-continueヘッダーはサポートしていません。- トレイリングヘッダーはサポートしていません。
'continue'イベントはサポートしていません。'information'イベントはサポートしていません。'socket'イベントはサポートしていません。'upgrade'イベントはサポートしていません。- 基盤となる
socketへの直接アクセスはサポートしていません。 ca、cert、key、rejectUnauthorizedなどの TLS 固有オプションの設定はサポートしていません。