Node.js API详解之 https

目录:

https模块简介

说明:

https 模块是 http 基于 TLS/SSL 的版本。

https.Agent 类

说明:

HTTPS 的一个类似于 http.Agent 的代理对象。查看 http.Agent 获取更多信息

https.globalAgent

说明:

https.Agent 的全局实例,用于所有 HTTPS 客户端请求。

https.Server 类

说明:

这个类是 tls.Server 的子类,跟 http.Server 一样触发事件。查看 http.Server 获取更多信息

server.close([callback])

说明:

停止服务端接收新的连接
callback:当服务器关闭时触发,绑定到 close 事件

server.listen()

说明:

开启监听加密连接的HTTPS服务器。 方法与net.Server的server.listen()相同

server.setTimeout([msecs][, callback])

说明:

设置 socket 的超时时间。 如果发生超时,则触发服务器对象的 ‘timeout’ 事件,并传入 socket 作为一个参数。
msecs:超时时间,默认值是 120000 (2 分钟).

server.timeout

说明:

获取 socket 被认定为超时的空闲毫秒数。默认为 120000 (2 分钟)

server.keepAliveTimeout

说明:

服务器完成最后的响应之后需要等待额外的传入数据的活跃毫秒数, socket 才能被销毁.

https.createServer([options][, requestListener])

说明:

对比http.createServer([requestListener]),https模块新增了options参数
options:来自 tls.createServer() 和 tls.createSecureContext() 的 options .

demo:

const https = require('https');
const fs = require('fs');

//tls.createServer()
const tlsOptions = {
	handshakeTimeout: 120, 	//如果SSL / TLS握手没有在指定的毫秒数内完成,则终止连接. 默认为120 秒。
	requestCert:false,	//设置为true时,服务器将从连接的客户端请求证书并尝试验证该证书。默认为 false。
	rejectUnauthorized:true,//服务器将拒绝未与供给的CA列表授权的任何连接。如果requestCert配置为true,这个选项只有一个效果true。默认为true。
	NPNProtocols:'hello world',//传递支持的NPN协议
	ALPNProtocols:['hello', 'world'],//传递支持的ALPN协议,当服务器同时收到来自客户端的NPN和ALPN扩展时,ALPN优先于NPN
	SNICallback:(servername, cb) => {},//如果客户端支持SNI TLS扩展,将会调用该函数。调用时会传递两个参数:servername和cb。SNICallback应该调用cb(null, ctx),其中ctx是一个SecureContext实例。
	sessionTimeout:1200,//一个整数,指定在服务器创建的TLS会话标识和TLS会话票据超时之前的秒数。
	ticketKeys:Buffer //这可以用来接受TLS服务器的多个实例上的TLS会话票证。
};
//tls.createSecureContext(options)
const certOptions = {
	pfx:'1233asasw1231adawe23123d',	//可选的PFX或PKCS12编码的私钥和证书链。
	passphrase: '123456', //PFX通常是加密的,如果是的话, passphrase将被用来解密它。
	key:'11sad23asd33',	//PEM格式的可选私钥。
	cert:'7s7s7df889qw990ds0sd-asd', // PEM格式的可选证书链。
	ca:'8ASD8ASD00EWQE0ASDA2123132ASDAS', //(可选)覆盖可信CA证书。默认是信任由Mozilla策划的知名CA。使用此选项明确指定CA时,Mozilla的CA将被完全替换。
	crl:'aasdlkj12asd', //可选的PEM格式的CRL(证书吊销列表)
	ciphers:'asdsdwww', //可选密码套件规范,替换默认值。
	honorCipherOrder:true, //尝试使用服务端的加密套件
	ecdhCurve:'P-521:P-384:P-256', //一个描述命名曲线的字符串,或一个以冒号分隔的曲线NID或名称列表
	dhparam:'aaaa', //Diffie Hellman参数 
	secureProtocol:'SSLv23_method', //可选的SSL方法,默认是 "SSLv23_method"。
	secureOptions:'16', //可选地影响OpenSSL协议的行为,这通常是不必要的。
	sessionIdContext:'asd'	//服务器使用可选的不透明标识符来确保会话状态不在应用程序之间共享。
}

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

https.get(options[, callback])

说明:

类似 http.get(),但是用于 HTTPS。

https.request(options[, callback])

说明:

向一个安全的服务器发起一个请求。
options与http.request()方法相同,不同的是以下几项:
protocol选项默认值为 https:
port选项默认为 443
agent选项默认为 https.globalAgent

demo:

const https = require('https');

const options = {
	hostname: '127.0.0.1',
	port: 443,
	path: '/user',
	method: 'POST'
};

const req = https.request(options, (res) => {
    console.log('状态码:', res.statusCode);
    console.log('请求头:', res.headers);

    res.on('data', (d) => {
    	process.stdout.write(d);
    });
});

req.on('error', (e) => {
	console.error(e);
});
req.end();