是否有可能在现有的tls.Server之上创建https服务器? 文档说:“这个类是tls.Server的子类......”。 我想使用tls.Server来处理纯数据流,如果需要,让https服务器处理其余的数据流。 (如使用https表达,只是在较低层)
此致
答案 0 :(得分:2)
没有任何官方/支持方式。
但是,如果你看一下https服务器的源代码,它只是将TLS服务器和HTTP连接处理程序连接在一起的粘合剂:
function Server(opts, requestListener) {
if (!(this instanceof Server)) return new Server(opts, requestListener);
if (process.features.tls_npn && !opts.NPNProtocols) {
opts.NPNProtocols = ['http/1.1', 'http/1.0'];
}
/// This is the part where we instruct TLS server to use
/// HTTP code to handle incoming connections.
tls.Server.call(this, opts, http._connectionListener);
this.httpAllowHalfOpen = false;
if (requestListener) {
this.addListener('request', requestListener);
}
this.addListener('clientError', function(err, conn) {
conn.destroy();
});
this.timeout = 2 * 60 * 1000;
}
要在TLS连接处理程序中切换到HTTPS,您可以执行以下操作:
var http = require('http');
function myTlsRequestListener(cleartextStream) {
if (shouldSwitchToHttps) {
http._connectionListener(cleartextStream);
} else {
// do other stuff
}
}
上面的代码基于版本0.11(即当前主版)。
警告强>
使用内部Node API可能会在升级到较新版本时咬你(即升级后你的应用程序可能会停止工作)。