首页/网络/协议速查/Connection 连接控制
HTTP 头与缓存70 条

Connection 连接控制

逐跳(hop-by-hop)连接管理字段:keep-alive/close 控制复用,也用于列出当前连接专用的字段名。

协议速查网络更新于 2026-10-13

连接控制与逐跳语义

Connection 是逐跳(hop-by-hop)头,只在当前这一跳有效,代理转发时必须处理而不能原样透传。它有双重作用:一是用 keep-alive 或 close 表示本连接是否复用,二是把某些头标记为「仅本跳专用」——被列进去的头名及其对应字段都不能再转发给下一跳,这是理解代理行为的关键。

基本信息

方向请求与响应都可出现
规范RFC 9110 §7.6.1,持久连接见 RFC 9112 §9.3
常见取值keep-alive(复用)、close(用完即关)、upgrade(协议升级)
其它用法列出本跳专用的头名,如 Connection: X-Trace-Id,代理须删掉 X-Trace-Id
HTTP/2 及以上该头被禁用,连接管理由协议自身承担

逐跳头清单

字段作用转发时
Connection连接管理并标记其它逐跳头必须移除
Keep-Alive空闲超时与最大请求数提示必须移除
Proxy-Authenticate 与 Proxy-Authorization代理层认证不得转发给源站
TE 与 Trailer传输编码与尾部字段协商按下一跳能力重写
Transfer-Encoding 与 Upgrade分帧与协议升级由代理按需要重设

连接管理示例

连接管理示例
curl -si -H 'Connection: close' https://example.com/ | head -3
# HTTP/1.1 200 OK
# connection: close   ← 本连接用完即关
curl -s -o /dev/null -w '%{num_connects} %{time_total}\n' https://example.com/   # 观察复用效果
# 代理侧常见写法:proxy_set_header Connection "";  清空后交给上游决定

典型使用场景

  • 调优反向代理与后端的连接复用策略,降低建连开销
  • 排查「上游收到多余自定义头」:确认代理是否清理了 Connection 列出的字段
  • 协议升级(WebSocket)时理解 Upgrade 与 Connection 的配合
  • 压测时区分连接复用与每请求新建连接两种模式的性能差异
代理转发时必须移除 Connection 及其列出的字段:若上游把自定义头写进 Connection: X-Foo,仍转发 X-Foo 就等于把逐跳语义泄漏给下一跳,可能被用作请求走私的构造材料。
HTTP/1.0 默认短连接,keep-alive 是其时代的显式开启手段;HTTP/1.1 默认持久连接,所以现代客户端很少主动发送该头,为兼容老代理仍常见于配置模板里。

易错点

  • 框架或网关按原样透传 Connection 与 Keep-Alive:上游可能据此误判连接语义,长连接池被打乱,出现偶发连接被重置
  • 反向代理里硬写 Connection: close:连接无法复用,QPS 高时端口与握手开销激增
  • 把 Connection 列出的自定义头继续转发:逐跳语义被破坏,审计与链路追踪信息可能串到下一跳
  • 在 HTTP/2 场景照搬 Connection 相关配置:该头在 HTTP/2 中被禁止,网关需要按 h2 语义重写而不是原样转发

数据来源与参考

  • RFC 9110 §7.6.1 Connection
  • RFC 9112 §9.3(持久连接)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌