
1) 【一句话结论】Keep-Alive通过HTTP头指示保持TCP连接复用,减少连接建立开销;Connection: close表示每次请求后断开连接。投放系统中,高频短连接(如广告请求)采用Keep-Alive复用连接提升响应速度,需隔离或单次请求则用Connection: close。
2) 【原理/概念讲解】TCP连接建立需三次握手(客户端SYN→服务器SYN-ACK→客户端ACK),耗时约100-200ms(网络延迟)。Keep-Alive是HTTP请求头(或响应头)的参数(如“Connection: keep-alive”),表示客户端/服务器在本次请求后保持连接,后续请求复用该连接,避免重复握手。Connection: close是HTTP头(如“Connection: close”),表示本次请求后断开连接。类比:Keep-Alive像餐厅“保留座位”,后续顾客可继续使用同一座位;Connection: close像“用完就离开”,下次来需重新找座位。需注意,Keep-Alive仅指示连接保持,实际复用由TCP的Keepalive机制(定时发送探测包)和HTTP的持久连接实现。
3) 【对比与适用场景】
| 特性 | Keep-Alive | Connection: close |
|---|---|---|
| 定义 | HTTP头,指示保持TCP连接,复用连接 | HTTP头,指示本次请求后断开连接 |
| 核心特性 | 复用TCP连接,减少三次握手开销 | 每次请求断开连接,无连接复用 |
| 使用场景 | 高频、短连接请求(如广告请求、实时数据) | 需隔离、安全(如不同用户、敏感数据)、单次请求 |
| 注意点 | 需配置连接超时(如timeout),避免资源占用 | 无需额外配置,但会增加连接建立开销 |
4) 【示例】投放系统中,广告请求流程:客户端发起HTTP GET请求,请求头包含“Connection: keep-alive”,服务器返回广告素材(响应头可能包含“Connection: keep-alive”)。客户端后续需要获取更多广告素材时,复用同一TCP连接,发送新的GET请求,服务器响应后继续复用,减少连接建立时间。若服务器配置了Keep-Alive的timeout为5秒,则连接空闲5秒后自动关闭。若请求涉及用户登录后的广告展示(需隔离用户会话),则服务器返回“Connection: close”,客户端后续请求需重新建立连接。
5) 【面试口播版答案】面试官您好,Keep-Alive和Connection: close的核心区别在于是否复用TCP连接。Keep-Alive通过HTTP头指示保持连接,后续请求复用同一连接,减少三次握手开销;Connection: close则表示每次请求后断开连接。在投放系统中,比如广告请求,由于请求频繁(比如秒级甚至更短),复用连接能显著减少RTT(往返时间),提升响应速度。比如,当客户端需要连续获取多个广告素材时,保持连接可以避免每次请求都重新建立TCP,从而优化性能。而如果请求涉及敏感数据或需要隔离(比如不同用户或不同业务模块),可能使用Connection: close来确保连接安全关闭。具体来说,对于投放系统的广告请求,我们通常配置Keep-Alive,因为广告请求是高频短连接,复用连接能减少连接建立的时间开销,提升响应效率。比如,当用户点击广告后,客户端需要快速获取广告素材,保持连接可以避免每次请求都经历TCP三次握手,从而加快响应速度。当然,如果请求涉及用户认证或需要隔离不同用户的请求(比如A用户请求广告,B用户请求日志),则可能使用Connection: close,确保连接在本次请求后关闭,避免会话混淆。
6) 【追问清单】
7) 【常见坑/雷区】