0

是否有可能在现有 tls.Server 之上创建 https 服务器?文档说:“这个类是 tls.Server.. 的子类”。我想使用 tls.Server 处理纯数据流,如果需要,让 https 服务器处理其余部分。(和 https 的 express 一样,只是在较低的层)

问候

4

1 回答 1

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版本的(即当前的master)。

警告

在升级到较新版本的过程中,使用内部 Node API 可能会咬到您(即您的应用程序可能会在升级后停止工作)。

于 2013-07-02T15:01:35.877 回答