连接复用时为什么 fetch 还是新建 TCP 连接?
我在做性能优化时发现,明明连续发了几个 fetch 请求到同一个域名,但浏览器 DevTools 里显示每个请求都新建了 TCP 连接,不是说 HTTP/1.1 支持 keep-alive、HTTP/2 支持连接复用吗?是不是我哪里写错了?
我试过加 withCredentials 和 mode: ‘cors’,也确认服务端返回了 Connection: keep-alive,但还是没复用。代码大概是这样:
fetch('/api/data1')
.then(res => res.json())
.then(() => fetch('/api/data2'))
.then(res => res.json())
.then(() => fetch('/api/data3'));
试试改成串行等待每个请求完成后再发下一个:
或者给 fetch 加上
keepalive: true强制保持连接:如果你的请求带自定义头或者用了非简单 Content-Type,浏览器会先发 OPTIONS 预检,这个也不会复用连接,记得检查一下。