【发布时间】:2014-10-05 03:12:04
【问题描述】:
在 Node.js 中,http.Server 和 https.Server 都会发出 clientError 事件,但参数不同:http.Server#clientError(exception, socket)https.Server#clientError(exception, securePair)
securePair 是 tls.SecurePair、securePair.cleartext 一个 tls.CleartextStream 和 securePair.encrypted 一个 tls.CryptoStream 的一个实例。
问题是:如何获取导致clientError的客户端的地址和端口?理论上,这应该可行:socket = securePair.cleartext.socket;console.log(socket.remoteAddress + ':' + socket.remotePort);
实际上,当我尝试使用 HTTP 连接到 HTTPS 服务器(假装它是 HTTP 服务器)并在几秒钟后取消时,我得到了 ECONNRESET 类型的 clientError,但 socket.remoteAddress 和 @ 987654338@ 都是undefined(尽管securePair.cleartext.socket 确实是net.Socket 而不是undefined)。
【问题讨论】:
-
这可能是因为 ssl 握手从未完成。如果您真的确实使用 https 连接然后发生错误会发生什么?
-
按照设计,
tls.SecurePair.cleartext对应于预身份验证流,不应受到 SSL 握手失败的影响。无论如何,我认为只要建立 TCP 连接,期望https.Server提供一种获取客户端地址的方法是完全合理的。 -
我面临着完全相同的问题...