首页/网络/抓包与流量分析速查/HTTP/2 RST_STREAM 判读
应用层报文判读71 条

HTTP/2 RST_STREAM 判读

HTTP/2 用帧级错误码终止单个流:RST_STREAM 的 error code(如 CANCEL、REFUSED_STREAM)指示取消原因,与 TCP RST 是两回事。

流级取消与连接级错误

HTTP/2 把请求拆成多个并发流,出错时可以只终止一个流而不影响整条连接,这就是 RST_STREAM 帧的作用:它携带错误码说明取消原因,例如取消、拒绝服务等。它与 TCP 的重置报文是两回事——前者是应用层流级动作,后者是传输层连接级动作。排障时最需要避免的错误就是看到流量中断就按连接级故障处理,实际上其他流可能一直运行正常。

基本信息

适用平台Wireshark / tshark 解析的 HTTP/2 流量
帧过滤http2.type == 3(RST_STREAM 帧)
错误码字段http2.rst_stream.error
连接级信号GOAWAY 帧代表整条连接即将关闭

典型使用场景

  • 页面部分资源加载失败而其他正常,确认是否为流级取消
  • 排查服务端主动拒绝某些请求的原因
  • 区分客户端主动放弃与服务端故障两类现象
  • 验证负载均衡或代理是否正确支持多路复用
  • 为前端错误上报寻找网络侧对应证据
  • 确认服务端优雅下线时的连接级通知行为

过滤与判读

过滤与判读
http2.type == 3                             # RST_STREAM 帧
http2.type == 7                             # GOAWAY 帧(连接级)
http2.rst_stream.error                     # 错误码取值
# 客户端主动取消常见于超时或页面离开,未必是故障
# 服务端拒绝通常伴随策略或限流信息
# 出现 GOAWAY 说明是连接级处置,需与流级取消分开对待

帧与错误码读法

观察项含义判读方向
RST_STREAM 帧单个流被终止其余流继续运行,属局部问题
流错误码取消原因分类按取值区分主动取消与拒绝
GOAWAY 帧整条连接即将关闭多为服务端下线或重启信号
受影响流数量取消范围单流与多流同时取消含义不同
不同协议版本实现下错误码取值需要按版本核对,抓包工具会直接给出解码后的名称,以工具显示为准。
客户端主动取消往往出现在用户离开页面或等待超时之后,这类取消不应计入服务端故障率。

易错点

  • 把流级取消当成连接故障:其他流可能一直正常,按整条连接处理会误判范围
  • 混淆 GOAWAY 与 RST_STREAM:一个是连接级信号,一个是流级信号,处置方式完全不同
  • 把客户端取消计入服务端错误率:主动取消占比较高时会明显污染监控指标
  • 忽略多路复用带来的复杂度:同一连接内不同流的问题需要按流区分,不能按连接聚合结论

数据来源与参考

  • RFC 9113(HTTP/2)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌