Spec-Zone.ru › Deno 2

https

HTTPS — это протокол HTTP поверх TLS/SSL. В Node.js он реализован в виде отдельного модуля.

Использование в Deno

import * as mod from "node:https";

класс Agent

наследует http.Agent

Использование в Deno

import { Agent } from "node:https";

Объект Agent для HTTPS, аналогичный http.Agent. Дополнительную информацию см. в разделе request.

Конструкторы

Agent(options?: AgentOptions)
новый

Свойства

options: AgentOptions

функция createServer

Использование в Deno

import { createServer } from "node:https";

Перегрузка 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);

Или

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);

Параметры типа

Request extends http.IncomingMessage = http.IncomingMessage
Response extends http.ServerResponse = http.ServerResponse

Параметры

requestListener: http.RequestListener<Request, Response>
необязательный

Обработчик, добавляемый для события 'request'.

Возвращаемый тип

Server<Request, Response>

Перегрузка 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>

Параметры типа

Request extends http.IncomingMessage = http.IncomingMessage
Response extends http.ServerResponse = http.ServerResponse

Параметры

options: ServerOptions<Request, Response>
requestListener: http.RequestListener<Request, Response>
необязательный

Возвращаемый тип

Server<Request, Response>

функция get

Использование в Deno

import { get } from "node:https";

Перегрузка 1

get(
options:
RequestOptions
| string
| URL
,
callback?: (res: http.IncomingMessage) => void,
): http.ClientRequest

Аналогично http.get(), но для HTTPS.

options может быть объектом, строкой или объектом URL. Если options — строка, она автоматически разбирается с помощью new URL(). Если это объект URL, он автоматически преобразуется в обычный объект options.

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);
});

Параметры

options:
RequestOptions
| string
| URL

Принимает те же options, что и request, при этом method всегда имеет значение GET.

callback: (res: http.IncomingMessage) => void
необязательный

Возвращаемый тип

http.ClientRequest

Перегрузка 2

get(
url: string | URL,
options: RequestOptions,
callback?: (res: http.IncomingMessage) => void,
): http.ClientRequest

Параметры

url: string | URL
options: RequestOptions
callback: (res: http.IncomingMessage) => void
необязательный

Возвращаемый тип

http.ClientRequest

функция request

Использование в Deno

import { request } from "node:https";

Перегрузка 1

request(
options:
RequestOptions
| string
| URL
,
callback?: (res: http.IncomingMessage) => void,
): http.ClientRequest

Отправляет запрос защищённому веб-серверу.

Также принимаются следующие дополнительные options из tls.connect(): ca, cert, ciphers, clientCertEngine, crl, dhparam, ecdhCurve, honorCipherOrder, key, passphrase, pfx, rejectUnauthorized, secureOptions, secureProtocol, servername, sessionIdContext, highWaterMark.

options может быть объектом, строкой или объектом URL. Если options — строка, она автоматически разбирается с помощью new URL(). Если это объект URL, он автоматически преобразуется в обычный объект options.

https.request() возвращает экземпляр класса http.ClientRequest. Экземпляр ClientRequest является потоком для записи. Если необходимо загрузить файл с помощью POST-запроса, запишите данные в объект ClientRequest.

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();

Пример с использованием параметров из 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) => {
  // ...
});

В качестве альтернативы можно отказаться от пула соединений, не используя 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) => {
  // ...
});

Пример использования URL в качестве options:

const options = new URL('https://abc:xyz@example.com');

const req = https.request(options, (res) => {
  // ...
});

Пример проверки отпечатка сертификата или открытого ключа (аналогично pin-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();

Например, вывод будет таким:

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

Параметры

options:
RequestOptions
| string
| URL

Принимает все options из request, с некоторыми отличиями в значениях по умолчанию:

callback: (res: http.IncomingMessage) => void
необязательный

Возвращаемый тип

http.ClientRequest

Перегрузка 2

request(
url: string | URL,
options: RequestOptions,
callback?: (res: http.IncomingMessage) => void,
): http.ClientRequest

Параметры

url: string | URL
options: RequestOptions
callback: (res: http.IncomingMessage) => void
необязательный

Возвращаемый тип

http.ClientRequest

интерфейс AgentOptions

наследует [http.AgentOptions][tls.ConnectionOptions]

Использование в Deno

import { type AgentOptions } from "node:https";

Свойства

maxCachedSessions: number | undefined
необязательный

класс Server

наследует tls.Server

Использование в Deno

import { Server } from "node:https";
Совместимость с Deno

Параметры cert и key не поддерживают массив в качестве входного значения.

Дополнительную информацию см. в http.Server.

Конструкторы

Server(requestListener?: http.RequestListener<Request, Response>)
new
Server(
options: ServerOptions<Request, Response>,
requestListener?: http.RequestListener<Request, Response>,
)
new

Параметры типа

Request extends http.IncomingMessage = http.IncomingMessage
Response extends http.ServerResponse = http.ServerResponse

Методы

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(
event: "checkContinue",
listener: http.RequestListener<Request, Response>,
): this
addListener(
event: "checkExpectation",
listener: http.RequestListener<Request, Response>,
): this
addListener(
event: "clientError",
listener: (
err: Error,
socket: Duplex,
) => void
,
): this
addListener(
event: "connect",
listener: (
req: InstanceType<Request>,
socket: Duplex,
head: Buffer,
) => void
,
): this
addListener(
event: "request",
listener: http.RequestListener<Request, Response>,
): this
addListener(
event: "upgrade",
listener: (
req: InstanceType<Request>,
socket: Duplex,
head: Buffer,
) => void
,
): this
closeAllConnections(): void

Закрывает все соединения, подключенные к этому серверу.

closeIdleConnections(): void

Закрывает все соединения, подключенные к этому серверу, которые не отправляют запрос и не ожидают ответа.

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: "connection",
socket: Duplex,
): boolean
emit(
event: "error",
err: Error,
): boolean
emit(event: "listening"): boolean
emit(
event: "checkContinue",
req: InstanceType<Request>,
res: InstanceType<Response>,
): boolean
emit(
event: "checkExpectation",
req: InstanceType<Request>,
res: InstanceType<Response>,
): boolean
emit(
event: "clientError",
err: Error,
socket: Duplex,
): boolean
emit(
event: "connect",
req: InstanceType<Request>,
socket: Duplex,
head: Buffer,
): boolean
emit(
event: "request",
req: InstanceType<Request>,
res: InstanceType<Response>,
): boolean
emit(
event: "upgrade",
req: InstanceType<Request>,
socket: Duplex,
head: Buffer,
): 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: "connection",
listener: (socket: Duplex) => void,
): this
on(
event: "error",
listener: (err: Error) => void,
): this
on(
event: "listening",
listener: () => void,
): this
on(
event: "checkContinue",
listener: http.RequestListener<Request, Response>,
): this
on(
event: "checkExpectation",
listener: http.RequestListener<Request, Response>,
): this
on(
event: "clientError",
listener: (
err: Error,
socket: Duplex,
) => void
,
): this
on(
event: "connect",
listener: (
req: InstanceType<Request>,
socket: Duplex,
head: Buffer,
) => void
,
): this
on(
event: "request",
listener: http.RequestListener<Request, Response>,
): this
on(
event: "upgrade",
listener: (
req: InstanceType<Request>,
socket: Duplex,
head: Buffer,
) => 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: "connection",
listener: (socket: Duplex) => void,
): this
once(
event: "error",
listener: (err: Error) => void,
): this
once(
event: "listening",
listener: () => void,
): this
once(
event: "checkContinue",
listener: http.RequestListener<Request, Response>,
): this
once(
event: "checkExpectation",
listener: http.RequestListener<Request, Response>,
): this
once(
event: "clientError",
listener: (
err: Error,
socket: Duplex,
) => void
,
): this
once(
event: "connect",
listener: (
req: InstanceType<Request>,
socket: Duplex,
head: Buffer,
) => void
,
): this
once(
event: "request",
listener: http.RequestListener<Request, Response>,
): this
once(
event: "upgrade",
listener: (
req: InstanceType<Request>,
socket: Duplex,
head: Buffer,
) => 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(
event: "checkContinue",
listener: http.RequestListener<Request, Response>,
): this
prependListener(
event: "checkExpectation",
listener: http.RequestListener<Request, Response>,
): this
prependListener(
event: "clientError",
listener: (
err: Error,
socket: Duplex,
) => void
,
): this
prependListener(
event: "connect",
listener: (
req: InstanceType<Request>,
socket: Duplex,
head: Buffer,
) => void
,
): this
prependListener(
event: "request",
listener: http.RequestListener<Request, Response>,
): this
prependListener(
event: "upgrade",
listener: (
req: InstanceType<Request>,
socket: Duplex,
head: Buffer,
) => void
,
): 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(
event: "checkContinue",
listener: http.RequestListener<Request, Response>,
): this
prependOnceListener(
event: "checkExpectation",
listener: http.RequestListener<Request, Response>,
): this
prependOnceListener(
event: "clientError",
listener: (
err: Error,
socket: Duplex,
) => void
,
): this
prependOnceListener(
event: "connect",
listener: (
req: InstanceType<Request>,
socket: Duplex,
head: Buffer,
) => void
,
): this
prependOnceListener(
event: "request",
listener: http.RequestListener<Request, Response>,
): this
prependOnceListener(
event: "upgrade",
listener: (
req: InstanceType<Request>,
socket: Duplex,
head: Buffer,
) => void
,
): this

интерфейс Server

наследует [http.Server]<Request, Response>
Совместимость с Deno

Параметры cert и key не поддерживают массив в качестве входного значения.

Параметры типа

Request extends http.IncomingMessage = http.IncomingMessage
Response extends http.ServerResponse = http.ServerResponse

псевдоним типа RequestOptions

Использование в Deno

import { type RequestOptions } from "node:https";

Определение

http.RequestOptions
& tls.SecureContextOptions
& { checkServerIdentity?: ((
hostname: string,
cert: tls.DetailedPeerCertificate,
) => Error | undefined) | undefined
; rejectUnauthorized?: boolean | undefined; servername?: string | undefined; }

псевдоним типа ServerOptions

Использование в Deno

import { type ServerOptions } from "node:https";

Параметры типа

Request extends http.IncomingMessage = http.IncomingMessage
Response extends http.ServerResponse = http.ServerResponse

Определение

tls.SecureContextOptions
& tls.TlsOptions
& http.ServerOptions<Request, Response>

переменная globalAgent

Использование в Deno

import { globalAgent } from "node:https";

Тип

Agent

© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/node/https

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API