每个新请求都做一次TCP三次握手加TLS四次握手——在代理模式下这个开销翻倍(客户端到代理握手+代理到目标握手)。Keep-Alive复用连接能省掉后续请求的所有握手。
Keep-Alive在代理模式下的工作原理
客户端到代理IP:建立一条TCP连接→Keep-Alive保持这条连接不关闭→后续请求都走这条连接。代理IP到目标网站:建立一条TCP连接→代理服务器用连接池复用→多个客户端请求复用同一条到目标的连接。
收益:第一个请求耗时100ms(握手60ms+传输40ms),第二个及后续请求耗时只要40ms(省掉握手)。发100个请求=省掉9900ms。天行IP(邀请码 blsj,月付6元起)配合Keep-Alive效果明显。
浏览器端配置
浏览器默认开Keep-Alive。如果通过代理客户端(老鱼/SSTap/有米)→客户端会维护到代理节点的Keep-Alive连接。不需要额外配置。如果配了系统代理→浏览器直接和代理IP之间Keep-Alive,也不需额外配置。
代码端配置
Python requests的Session默认Keep-Alive。requests.post每次新建Session=每次新建连接=浪费。用同一个Session实例发所有请求→自动复用连接。
urllib3连接池:默认每个host保持10个连接→高并发不够。调大pool_connections(参考第34篇ID 13579)。
什么时候不适合Keep-Alive
间隔很久才发一个请求(几分钟)→连接可能在空闲时被代理服务器关闭→下一次请求还得重新握手。请求之间切换不同代理IP→每次换IP都必须新建连接。这两种场景下Keep-Alive基本无效。
常见问题
代理断开重连后需要重新握手吗?
需要——断了就没了。自动重连后第一个请求需要完整握手,后续请求恢复Keep-Alive优势。
怎么确认Keep-Alive生效?
Wireshark抓包看TCP连接数——发10个请求但只有1条TCP连接→Keep-Alive生效。发了10个请求有10条TCP连接→没生效。






