http/2通过二进制分帧、单连接多路复用、hpack头部压缩和流优先级解决http/1.1的多连接开销、应用层队头阻塞和头部冗余;http/3将http语义迁移至quic/udp,解决tcp层队头阻塞、减少握手延迟并支持连接迁移。

Fetch API 本身不提供直接配置 TCP Keep-Alive 的接口,因为 Keep-Alive 是底层 TCP 连接的机制,由浏览器和操作系统管理,JavaScript 无法在应用层直接控制。
Keep-Alive 是自动启用的(无需手动配置)
现代浏览器默认对 HTTP/1.1 请求启用连接复用(Connection: keep-alive),只要满足以下条件,fetch 就会自动复用已有空闲连接:
- 请求目标域名、端口、协议(HTTP/HTTPS)相同;
- 服务端响应头包含 Connection: keep-alive(HTTP/1.1 默认行为);
- 服务端未主动关闭连接(如返回 Connection: close);
- 连接未超时(浏览器通常保持空闲连接数秒到数分钟,具体由实现决定)。
影响连接复用的关键因素
你无法用 fetch 参数开启/关闭 Keep-Alive,但可通过以下方式间接提升复用成功率:
- 统一请求基础信息:尽量复用同一 origin 的 fetch 调用(避免混用 http/https、带/不带 www、不同端口);
- 避免显式禁用:不要在 headers 中设置 Connection: close;
- 服务端配合:确保后端返回 Keep-Alive: timeout=5, max=1000 等响应头(非必需,但有助于协商);
- 避免跨域预检干扰:CORS 预检请求(OPTIONS)可能占用连接,合理设计 API 减少不必要的预检。
HTTP/2 和 HTTP/3 下更高效
在支持 HTTP/2 或 HTTP/3 的环境中,连接复用是默认且更智能的:
- HTTP/2 使用单个 TCP 连接多路复用多个请求,无需传统 Keep-Alive 协商;
- 浏览器自动管理连接生命周期,开发者无需干预;
- 可通过浏览器开发者工具的 Network → Headers → Connection 查看实际使用的连接状态(如 reuse 或 new)。
不能做的和常见误解
以下操作无效或错误:
- 在 fetch 的 headers 中设置 Keep-Alive: timeout=60 —— 浏览器忽略该请求头;
- 尝试通过 AbortController 或 timeout 控制 Keep-Alive —— 它只控制单次请求生命周期;
- 认为调用 fetch(url, { cache: 'no-store' }) 会影响连接复用 —— 缓存策略与 TCP 连接无关。
不复杂但容易忽略:Keep-Alive 不是 fetch 的配置项,而是浏览器与服务器协同工作的默认行为。专注写好请求逻辑、保持 origin 一致、配好服务端,连接复用自然发生。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











