在 Node 的 https 模块文档中,关于 https.request,给出了一个示例:
const options = {
hostname: 'encrypted.google.com',
port: 443,
path: '/',
method: 'GET',
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};
options.agent = new https.Agent(options);
const req = https.request(options, (res) => {
// ...
});
我认为这个例子有点含糊不清,我已经在SO关于这种模棱两可的问题问了一个问题,并在根据评论确认了奇怪措辞后,开了一个问题。
尽管如此,我仍在试图理解代理在这种情况下所扮演的角色,因为https.Agent模块确实接受TLS连接选项:
interface AgentOptions extends http.AgentOptions, tls.ConnectionOptions
https.Agent对象的定义是:用于HTTPS的类似于http.Agent的对象。http.Agent对象的定义是:代理负责为HTTP客户端管理连接持久性和重用性。从中可以理解到,代理负责管理连接并且https.Agent存在意味着它管理HTTPS连接,因此可以接收TLS配置选项。然而,这是否意味着代理在这种情况下还有额外的配置网络安全的责任呢?如果是这样的话,那么这个API就有些奇怪了。我本来期望在https.request上看到网络连接配置的单独键(就像在上面片段后显示的例子中一样)。为什么要过度使用同一个对象来承担另一个职责呢?实际上,为什么要有https.Agent呢?http.Agent应该控制连接池和保持连接存活,而另一层应该控制配置实际请求。对我来说,https.Agent对象似乎没有很好地定义。