节点中的HTTPS代理的角色是什么? [英] What is the role of https.Agent in Node?

查看:8
本文介绍了节点中的HTTPS代理的角色是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在节点https module docs中, Http://请求:

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 question regarding this ambiguity,在一个重申奇怪措辞的评论后面,opened an issue for this

无论如何,我仍在努力理解代理在此场景中扮演的角色,因为HTTPS。代理模块确实接受TLS连接选项:

interface AgentOptions extends http.AgentOptions, tls.ConnectionOptions

https.Agent对象的定义为:

与HTTPS类似的HTTPS代理对象。

http.Agent对象的定义为:

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

由此我了解到,代理负责管理连接--很明显,HTTPS代理位于普通的Http之上。代理的存在意味着它负责管理HTTPS连接--因此它可能会收到TLS配置选项。

我的问题是-这是否意味着代理在这种情况下需要额外负责配置请求的网络安全?如果这是真的,那么这就是一个奇怪的API--我本以为会在一个单独的关键字上看到网络连接配置,以用于HTTPS请求(如上面代码片断之后的示例所示)。为什么要为另一个责任重载同一对象呢?真的吗,为什么要有HTTPS代理呢?代理应该控制连接池和保持连接处于活动状态,而另一层应该控制实际请求的配置。在我看来,Https.Agent对象定义不明确。

推荐答案

实际上HTTPS doc指向一些好的资源,它还包含一个指向HTTPS module source code的链接,这揭示了很多东西。但要回答您的问题:

这是否意味着代理在这种情况下需要额外负责配置请求的网络安全

在某种程度上,您的HTTPS代理可以执行自定义安全功能,甚至可以使用外部HTTPS实现,但对于内置的HTTPS代理,使用原生TLS模块,您传递给构造函数的选项是ultimately passed to tls.connect,允许您配置自定义TLS选项。

为什么要为另一个职责重载同一对象?说真的,为什么要有HTTPS代理?

因为HTTPS在TLS上运行。实际上https.Agent内部调用并使用http.Agent构造。额外的部分主要是在TCP套接字和套接字上使用SSLSession;,如果您搜索getName in https.Agent源代码并将其与http.Agent's进行比较,您会发现SSL会话缓存基于更多的字段,如动态主机参数、客户端证书等,这些都是HTTP根本不存在的。

这篇关于节点中的HTTPS代理的角色是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆