new Agent([options])


  • options <Object> 一组可在代理上设置的可配置选项。可以包含以下字段:
    • keepAlive <boolean> 即使没有未完成的请求,也要保留套接字,以便将来可以用于请求,而无需重新建立 TCP 连接。不要与 Connection 头的 keep-alive 值混淆。使用代理时总是会发送 Connection: keep-alive 头,除非明确指定了 Connection 头,或者分别将 keepAlivemaxSockets 选项设置为 falseInfinity,在这种情况下将使用 Connection: close默认值: false
    • keepAliveMsecs <number> 使用 keepAlive 选项时,指定 TCP Keep-Alive 数据包的 初始延迟。当 keepAlive 选项为 falseundefined 时将被忽略。默认值: 1000
    • agentKeepAliveTimeoutBuffer <number> 在确定套接字过期时间时,从服务器提供的 keep-alive: timeout=... 提示中减去的毫秒数。这个缓冲时间有助于确保代理在服务器关闭套接字之前稍微先关闭它,从而减少在服务器即将关闭的套接字上发送请求的可能性。默认值: 1000
    • maxSockets <number> 每个主机允许的最大套接字数量。如果同一主机打开多个并发连接,每个请求将使用新的套接字,直到达到 maxSockets 值。如果主机尝试打开的连接数超过 maxSockets,额外的请求将进入待处理请求队列,并在现有连接终止后进入活动连接状态。这确保了在任何时间点,每个主机最多只有 maxSockets 个活动连接。默认值: Infinity
    • maxTotalSockets <number> 允许所有主机总共使用的最大套接字数量。每个请求将使用一个新的套接字,直到达到最大值。 默认值: Infinity
    • maxFreeSockets <number> 每个主机允许保持空闲状态的最大套接字数量。仅在 keepAlive 设置为 true 时相关。默认值: 256
    • scheduling <string> 选择下一个可用套接字时要应用的调度策略。可以是 'fifo''lifo'。这两种调度策略的主要区别在于,'lifo' 选择最近使用的套接字,而 'fifo' 选择最不常使用的套接字。如果每秒请求率较低,'lifo' 调度可以降低选择已因不活动而被服务器关闭的套接字的风险。如果每秒请求率较高,'fifo' 调度将最大化打开套接字的数量,而 'lifo' 调度将其保持在尽可能低的水平。默认值: 'lifo'
    • timeout <number> 套接字超时(毫秒)。这将设置创建套接字时的超时。
    • proxyEnv <Object> | <undefined> 代理配置的环境变量。详见 内置代理支持默认值: undefined
      • HTTP_PROXY <string> | <undefined> HTTP 请求应使用的代理服务器的 URL。如果未定义,则 HTTP 请求不使用代理。
      • HTTPS_PROXY <string> | <undefined> HTTPS 请求应使用的代理服务器的 URL。如果未定义,则 HTTPS 请求不使用代理。
      • NO_PROXY <string> | <undefined> 指定不应通过代理路由的端点的模式。
      • http_proxy <string> | <undefined>HTTP_PROXY 相同。如果两个都设置了,则以 http_proxy 为准。
      • https_proxy <string> | <undefined>HTTPS_PROXY 相同。如果两个都设置了,则以 https_proxy 为准。
      • no_proxy <string> | <undefined>NO_PROXY 相同。如果两个都设置了,则以 no_proxy 为准。
    • defaultPort <number> 当请求中未指定端口时使用的默认端口。默认值: 80
    • protocol <string> 代理使用的协议。默认值: 'http:'

socket.connect() 中的 options 也受支持。

要配置其中的任何一个,必须创建一个自定义的 http.Agent 实例。

🌐 To configure any of them, a custom http.Agent instance must be created.

import { Agent, request } from 'node:http';
const keepAliveAgent = new Agent({ keepAlive: true });
options.agent = keepAliveAgent;
request(options, onResponseCallback);const http = require('node:http');
const keepAliveAgent = new http.Agent({ keepAlive: true });
options.agent = keepAliveAgent;
http.request(options, onResponseCallback);