Node.js https.Agent在节点中的角色是什么?

Node.js https.Agent在节点中的角色是什么?,node.js,ssl,https,tls1.2,Node.js,Ssl,Https,Tls1.2,在节点中, 关于https.request,示例如下所示: const选项={ 主机名:“encrypted.google.com”, 港口:443, 路径:“/”, 方法:“GET”, key:fs.readFileSync('test/fixtures/keys/agent2 key.pem'), 证书:fs.readFileSync('test/fixtures/keys/agent2-cert.pem')) }; options.agent=新的https.agent(选项); cons

在节点中, 关于https.request,示例如下所示:

const选项={
主机名:“encrypted.google.com”,
港口:443,
路径:“/”,
方法:“GET”,
key:fs.readFileSync('test/fixtures/keys/agent2 key.pem'),
证书:fs.readFileSync('test/fixtures/keys/agent2-cert.pem'))
};
options.agent=新的https.agent(选项);
const req=https.request(选项,(res)=>{
// ...
});
在我看来,这个例子有点模棱两可,我问了一个问题,并在一条评论后重申了奇怪的措辞

无论如何,我仍在试图理解代理在该场景中扮演的角色,因为https.Agent模块确实接受TLS连接选项:

接口代理扩展了http.AgentOptions、tls.ConnectionOptions
对象的定义为:

HTTPS的代理对象类似于http.Agent

对象的定义是:

代理负责管理HTTP客户端的连接持久性和重用

从这一点我了解到,代理“负责”管理连接——显然,https.Agent存在于“普通”http.Agent之上这一事实意味着它“负责”管理https连接——因此它可能会收到TLS配置选项

我的问题是-这是否意味着在这种情况下,代理有额外的责任配置请求的网络安全性?如果这是真的,那么这是一个奇怪的API-我本来希望在https.request的单独键上看到网络连接配置(如上面代码片段后面的示例所示)。为什么要为另一个责任重载同一个对象?真的,为什么要有一个https.Agent呢?代理应该控制连接池和保持连接活动,而另一层应该控制配置实际请求。代理对象对我来说似乎没有很好的定义。

实际上它指向一些好的资源,它还包含指向的链接,这揭示了很多。但要回答你的问题:

这是否意味着在这种情况下,代理有额外的责任配置请求的网络安全性

是的,您的HTTPS代理可以执行自定义安全功能,甚至可以使用外部HTTPS实现,但是对于内置的HTTPS.agent,使用本机TLS模块,并且您传递给构造函数的选项是,允许您配置自定义TLS选项

为什么要为另一个责任重载同一个对象?真的,为什么要有一个https.Agent呢

因为HTTPS在TLS上运行。实际上
https.Agent
使用
http.Agent
进行内部调用和构造。额外的位主要是通过TCP“套接字”使用SSL“会话”,如果您搜索源并与之比较,您将发现SSL会话缓存基于更多字段,如DHparams、客户端证书等。HTTP根本不存在这些内容