https
HTTPS is the HTTP protocol over TLS/SSL. In Node.js this is implemented as a separate module.
Usage in Deno
import * as mod from "node:https";
class Agent
Usage in Deno
import { Agent } from "node:https";
An Agent object for HTTPS similar to http.Agent. See request for more information.
Constructors
Agent(options?: AgentOptions) Properties
function createServer
Usage in Deno
import { createServer } from "node:https";
Overload 1
createServer<
Request extends http.IncomingMessage = http.IncomingMessage,
Response extends http.ServerResponse = http.ServerResponse,
>(requestListener?: http.RequestListener<Request, Response>): Server<Request, Response>// curl -k https://localhost:8000/
import https from 'node:https';
import fs from 'node:fs';
const options = {
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'),
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
Or
import https from 'node:https';
import fs from 'node:fs';
const options = {
pfx: fs.readFileSync('test/fixtures/test_cert.pfx'),
passphrase: 'sample',
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
Type Parameters
Request extends http.IncomingMessage = http.IncomingMessage Response extends http.ServerResponse = http.ServerResponse Parameters
Return Type
Overload 2
createServer<
Request extends http.IncomingMessage = http.IncomingMessage,
Response extends http.ServerResponse = http.ServerResponse,
>(
options: ServerOptions<Request, Response>,
requestListener?: http.RequestListener<Request, Response>,
): Server<Request, Response>
function get
Usage in Deno
import { get } from "node:https";
Overload 1
get(
options: ,
callback?: (res: http.IncomingMessage) => void,
): http.ClientRequestLike http.get() but for HTTPS.
options can be an object, a string, or a URL object. If options is a string, it is automatically parsed with new URL(). If it is a URL object, it will be automatically converted to an ordinary options object.
import https from 'node:https';
https.get('https://encrypted.google.com/', (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.on('data', (d) => {
process.stdout.write(d);
});
}).on('error', (e) => {
console.error(e);
});
Parameters
options: Accepts the same options as request, with the method always set to GET.
callback: (res: http.IncomingMessage) => void Return Type
http.ClientRequest Overload 2
get(): http.ClientRequestParameters
Return Type
http.ClientRequest function request
Usage in Deno
import { request } from "node:https";
Overload 1
request(
options: ,
callback?: (res: http.IncomingMessage) => void,
): http.ClientRequestMakes a request to a secure web server.
The following additional options from tls.connect() are also accepted: ca, cert, ciphers, clientCertEngine, crl, dhparam, ecdhCurve, honorCipherOrder, key, passphrase, pfx, rejectUnauthorized, secureOptions, secureProtocol, servername, sessionIdContext, highWaterMark.
options can be an object, a string, or a URL object. If options is a string, it is automatically parsed with new URL(). If it is a URL object, it will be automatically converted to an ordinary options object.
https.request() returns an instance of the http.ClientRequest class. The ClientRequest instance is a writable stream. If one needs to upload a file with a POST request, then write to the ClientRequest object.
import https from 'node:https';
const options = {
hostname: 'encrypted.google.com',
port: 443,
path: '/',
method: 'GET',
};
const req = https.request(options, (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.on('data', (d) => {
process.stdout.write(d);
});
});
req.on('error', (e) => {
console.error(e);
});
req.end();
Example using options from tls.connect():
const options = {
hostname: 'encrypted.google.com',
port: 443,
path: '/',
method: 'GET',
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'),
};
options.agent = new https.Agent(options);
const req = https.request(options, (res) => {
// ...
});
Alternatively, opt out of connection pooling by not using an Agent.
const options = {
hostname: 'encrypted.google.com',
port: 443,
path: '/',
method: 'GET',
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'),
agent: false,
};
const req = https.request(options, (res) => {
// ...
});
Example using a URL as options:
const options = new URL('https://abc:xyz@example.com');
const req = https.request(options, (res) => {
// ...
});
Example pinning on certificate fingerprint, or the public key (similar topin-sha256):
import tls from 'node:tls';
import https from 'node:https';
import crypto from 'node:crypto';
function sha256(s) {
return crypto.createHash('sha256').update(s).digest('base64');
}
const options = {
hostname: 'github.com',
port: 443,
path: '/',
method: 'GET',
checkServerIdentity: function(host, cert) {
// Make sure the certificate is issued to the host we are connected to
const err = tls.checkServerIdentity(host, cert);
if (err) {
return err;
}
// Pin the public key, similar to HPKP pin-sha256 pinning
const pubkey256 = 'pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU=';
if (sha256(cert.pubkey) !== pubkey256) {
const msg = 'Certificate verification error: ' +
`The public key of '${cert.subject.CN}' ` +
'does not match our pinned fingerprint';
return new Error(msg);
}
// Pin the exact certificate, rather than the pub key
const cert256 = '25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:' +
'D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16';
if (cert.fingerprint256 !== cert256) {
const msg = 'Certificate verification error: ' +
`The certificate of '${cert.subject.CN}' ` +
'does not match our pinned fingerprint';
return new Error(msg);
}
// This loop is informational only.
// Print the certificate and public key fingerprints of all certs in the
// chain. Its common to pin the public key of the issuer on the public
// internet, while pinning the public key of the service in sensitive
// environments.
do {
console.log('Subject Common Name:', cert.subject.CN);
console.log(' Certificate SHA256 fingerprint:', cert.fingerprint256);
hash = crypto.createHash('sha256');
console.log(' Public key ping-sha256:', sha256(cert.pubkey));
lastprint256 = cert.fingerprint256;
cert = cert.issuerCertificate;
} while (cert.fingerprint256 !== lastprint256);
},
};
options.agent = new https.Agent(options);
const req = https.request(options, (res) => {
console.log('All OK. Server matched our pinned cert or public key');
console.log('statusCode:', res.statusCode);
// Print the HPKP values
console.log('headers:', res.headers['public-key-pins']);
res.on('data', (d) => {});
});
req.on('error', (e) => {
console.error(e.message);
});
req.end();
Outputs for example:
Subject Common Name: github.com
Certificate SHA256 fingerprint: 25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16
Public key ping-sha256: pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU=
Subject Common Name: DigiCert SHA2 Extended Validation Server CA
Certificate SHA256 fingerprint: 40:3E:06:2A:26:53:05:91:13:28:5B:AF:80:A0:D4:AE:42:2C:84:8C:9F:78:FA:D0:1F:C9:4B:C5:B8:7F:EF:1A
Public key ping-sha256: RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho=
Subject Common Name: DigiCert High Assurance EV Root CA
Certificate SHA256 fingerprint: 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF
Public key ping-sha256: WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=
All OK. Server matched our pinned cert or public key
statusCode: 200
headers: max-age=0; pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="; pin-sha256="RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho=";
pin-sha256="k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws="; pin-sha256="K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q="; pin-sha256="IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4=";
pin-sha256="iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0="; pin-sha256="LvRiGEjRqfzurezaWuj8Wie2gyHMrW5Q06LspMnox7A="; includeSubDomains
Parameters
options: Accepts all options from request, with some differences in default values:
callback: (res: http.IncomingMessage) => void Return Type
http.ClientRequest Overload 2
request(): http.ClientRequestParameters
Return Type
http.ClientRequest interface AgentOptions
Usage in Deno
import { type AgentOptions } from "node:https";
Properties
maxCachedSessions: number | undefined class Server
Usage in Deno
import { Server } from "node:https";
The cert and key options do not support an array input.
See http.Server for more information.
Constructors
Type Parameters
Request extends http.IncomingMessage = http.IncomingMessage Response extends http.ServerResponse = http.ServerResponse Methods
addListener(
event: string,
listener: (...args: any[]) => void,
): this addListener(
event: "keylog",
listener: (
line: Buffer,
tlsSocket: tls.TLSSocket,
) => void,
): this addListener(
event: "newSession",
listener: (
sessionId: Buffer,
sessionData: Buffer,
callback: (
err: Error,
resp: Buffer,
) => void,
) => void,
): this addListener(
event: "OCSPRequest",
listener: (
certificate: Buffer,
issuer: Buffer,
callback: (
err: Error | null,
resp: Buffer,
) => void,
) => void,
): this addListener(
event: "resumeSession",
listener: (
sessionId: Buffer,
callback: (
err: Error,
sessionData: Buffer,
) => void,
) => void,
): this addListener(
event: "secureConnection",
listener: (tlsSocket: tls.TLSSocket) => void,
): this addListener(
event: "tlsClientError",
listener: (
err: Error,
tlsSocket: tls.TLSSocket,
) => void,
): this addListener(
event: "close",
listener: () => void,
): this addListener(
event: "connection",
listener: (socket: Duplex) => void,
): this addListener(
event: "error",
listener: (err: Error) => void,
): this addListener(
event: "listening",
listener: () => void,
): this addListener(): this addListener(): this addListener(
event: "clientError",
listener: (
err: Error,
socket: Duplex,
) => void,
): this addListener(): this addListener(): this addListener(): this closeAllConnections(): void Closes all connections connected to this server.
closeIdleConnections(): void Closes all connections connected to this server which are not sending a request or waiting for a response.
emit(
event: string,
...args: any[],
): boolean emit(
event: "keylog",
line: Buffer,
tlsSocket: tls.TLSSocket,
): boolean emit(
event: "newSession",
sessionId: Buffer,
sessionData: Buffer,
callback: (
err: Error,
resp: Buffer,
) => void,
): boolean emit(
event: "OCSPRequest",
certificate: Buffer,
issuer: Buffer,
callback: (
err: Error | null,
resp: Buffer,
) => void,
): boolean emit(
event: "resumeSession",
sessionId: Buffer,
callback: (
err: Error,
sessionData: Buffer,
) => void,
): boolean emit(
event: "secureConnection",
tlsSocket: tls.TLSSocket,
): boolean emit(
event: "tlsClientError",
err: Error,
tlsSocket: tls.TLSSocket,
): boolean emit(event: "close"): boolean emit(
event: "error",
err: Error,
): boolean emit(event: "listening"): boolean on(
event: string,
listener: (...args: any[]) => void,
): this on(
event: "keylog",
listener: (
line: Buffer,
tlsSocket: tls.TLSSocket,
) => void,
): this on(
event: "newSession",
listener: (
sessionId: Buffer,
sessionData: Buffer,
callback: (
err: Error,
resp: Buffer,
) => void,
) => void,
): this on(
event: "OCSPRequest",
listener: (
certificate: Buffer,
issuer: Buffer,
callback: (
err: Error | null,
resp: Buffer,
) => void,
) => void,
): this on(
event: "resumeSession",
listener: (
sessionId: Buffer,
callback: (
err: Error,
sessionData: Buffer,
) => void,
) => void,
): this on(
event: "secureConnection",
listener: (tlsSocket: tls.TLSSocket) => void,
): this on(
event: "tlsClientError",
listener: (
err: Error,
tlsSocket: tls.TLSSocket,
) => void,
): this on(
event: "close",
listener: () => void,
): this on(
event: "error",
listener: (err: Error) => void,
): this on(
event: "listening",
listener: () => void,
): this once(
event: string,
listener: (...args: any[]) => void,
): this once(
event: "keylog",
listener: (
line: Buffer,
tlsSocket: tls.TLSSocket,
) => void,
): this once(
event: "newSession",
listener: (
sessionId: Buffer,
sessionData: Buffer,
callback: (
err: Error,
resp: Buffer,
) => void,
) => void,
): this once(
event: "OCSPRequest",
listener: (
certificate: Buffer,
issuer: Buffer,
callback: (
err: Error | null,
resp: Buffer,
) => void,
) => void,
): this once(
event: "resumeSession",
listener: (
sessionId: Buffer,
callback: (
err: Error,
sessionData: Buffer,
) => void,
) => void,
): this once(
event: "secureConnection",
listener: (tlsSocket: tls.TLSSocket) => void,
): this once(
event: "tlsClientError",
listener: (
err: Error,
tlsSocket: tls.TLSSocket,
) => void,
): this once(
event: "close",
listener: () => void,
): this once(
event: "error",
listener: (err: Error) => void,
): this once(
event: "listening",
listener: () => void,
): this prependListener(
event: string,
listener: (...args: any[]) => void,
): this prependListener(
event: "keylog",
listener: (
line: Buffer,
tlsSocket: tls.TLSSocket,
) => void,
): this prependListener(
event: "newSession",
listener: (
sessionId: Buffer,
sessionData: Buffer,
callback: (
err: Error,
resp: Buffer,
) => void,
) => void,
): this prependListener(
event: "OCSPRequest",
listener: (
certificate: Buffer,
issuer: Buffer,
callback: (
err: Error | null,
resp: Buffer,
) => void,
) => void,
): this prependListener(
event: "resumeSession",
listener: (
sessionId: Buffer,
callback: (
err: Error,
sessionData: Buffer,
) => void,
) => void,
): this prependListener(
event: "secureConnection",
listener: (tlsSocket: tls.TLSSocket) => void,
): this prependListener(
event: "tlsClientError",
listener: (
err: Error,
tlsSocket: tls.TLSSocket,
) => void,
): this prependListener(
event: "close",
listener: () => void,
): this prependListener(
event: "connection",
listener: (socket: Duplex) => void,
): this prependListener(
event: "error",
listener: (err: Error) => void,
): this prependListener(
event: "listening",
listener: () => void,
): this prependListener(): this prependListener(): this prependListener(
event: "clientError",
listener: (
err: Error,
socket: Duplex,
) => void,
): this prependListener(): this prependListener(): this prependListener(): this prependOnceListener(
event: string,
listener: (...args: any[]) => void,
): this prependOnceListener(
event: "keylog",
listener: (
line: Buffer,
tlsSocket: tls.TLSSocket,
) => void,
): this prependOnceListener(
event: "newSession",
listener: (
sessionId: Buffer,
sessionData: Buffer,
callback: (
err: Error,
resp: Buffer,
) => void,
) => void,
): this prependOnceListener(
event: "OCSPRequest",
listener: (
certificate: Buffer,
issuer: Buffer,
callback: (
err: Error | null,
resp: Buffer,
) => void,
) => void,
): this prependOnceListener(
event: "resumeSession",
listener: (
sessionId: Buffer,
callback: (
err: Error,
sessionData: Buffer,
) => void,
) => void,
): this prependOnceListener(
event: "secureConnection",
listener: (tlsSocket: tls.TLSSocket) => void,
): this prependOnceListener(
event: "tlsClientError",
listener: (
err: Error,
tlsSocket: tls.TLSSocket,
) => void,
): this prependOnceListener(
event: "close",
listener: () => void,
): this prependOnceListener(
event: "connection",
listener: (socket: Duplex) => void,
): this prependOnceListener(
event: "error",
listener: (err: Error) => void,
): this prependOnceListener(
event: "listening",
listener: () => void,
): this prependOnceListener(): this prependOnceListener(): this prependOnceListener(
event: "clientError",
listener: (
err: Error,
socket: Duplex,
) => void,
): this prependOnceListener(): this prependOnceListener(): this prependOnceListener(): this type alias RequestOptions
Usage in Deno
import { type RequestOptions } from "node:https";
Definition
http.RequestOptions
& tls.SecureContextOptions
& { checkServerIdentity?: ((
hostname: string,
cert: tls.DetailedPeerCertificate,
) => Error | undefined) | undefined; rejectUnauthorized?: boolean | undefined; servername?: string | undefined; }
type alias ServerOptions
Usage in Deno
import { type ServerOptions } from "node:https";
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/node/https