Connection close 是什么
响应头里的 Connection: close 表示服务端在本次响应之后关闭连接,客户端不应再复用这条 TCP 连接。它出现在几类场景:服务端过载保护、达到长连接请求数上限后的收尾、代理或网关的连接策略、以及应用框架的错误处理分支。判读要点是把应用层的关闭意图与网络层的连接断开对应起来:带 close 头的响应之后应当能看到服务端发出的 FIN,两者对不上就说明中间还有设备在干预。连续多个响应都带 close 会明显削弱连接复用,在高延迟链路上直接表现为页面变慢。
基本信息
| 协议依据 | RFC 9112(连接管理) |
|---|---|
| 抓包字段 | http.connection |
| 版本差异 | HTTP/1.0 默认关闭,HTTP/1.1 默认保持 |
| 对应报文 | 响应之后应当出现服务端发出的 FIN |
| 主要影响 | 复用率下降,握手与慢启动成本重复支付 |
典型使用场景
- 复用率分析:统计带 close 的响应比例,评估连接复用是否被削弱
- 过载识别:某台后端突然大量返回 close,通常是并发或连接数触顶
- 版本差异核对:HTTP/1.0 与 1.1 默认行为相反,先看请求行的版本
- 代理策略确认:网关可能统一改写连接策略,需要与设备配置对照
- 与网络断开区分:应用层的关闭意图和链路异常断连是两回事
过滤与核对
过滤与核对
http.connection contains "close" # 找出声明关闭的报文
http.connection == "keep-alive" # 对照声明保持的报文
http.response && http.connection contains "close" # 只看响应侧
# 随后核对同一条流上是否出现服务端 FIN连接选项判读
| 取值 | 含义 | 预期报文 |
|---|---|---|
| close | 本次响应后关闭连接 | 随后应出现服务端 FIN |
| keep-alive | 保持连接供复用 | 后续请求应复用同一条流 |
| HTTP/1.1 无该头 | 默认保持连接 | 按版本判断而非按字面理解 |
| HTTP/1.0 无该头 | 默认关闭连接 | 不应假设复用 |
HTTP/1.0 的响应不带 keep-alive 时默认关闭,HTTP/1.1 恰好相反;解读之前先确认请求行中的协议版本,否则很容易把正常行为当成异常。
负载均衡与监控系统的健康检查也会制造大量短连接与关闭响应,做复用率统计时要先剔除探测来源,否则数字会被显著拉低。