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

HTTP/2 设置协商判读

连接开场双方交换 SETTINGS:MAX_CONCURRENT_STREAMS、INITIAL_WINDOW_SIZE 等决定并发与流控基线,期望值与实际不符先查这里。

HTTP2 设置协商是什么

HTTP/2 连接建立后双方立即交换 SETTINGS 帧,用它协商连接级参数:最大并发流数、初始流控窗口、最大帧大小、头部列表大小上限等。这些参数决定后续的并发能力与流控基线,应用侧观察到并发上不去或大对象传输被切得过碎时,第一步就该核对这里协商出的取值。SETTINGS 帧必须被对端确认,长期收不到确认属于协议层面的异常。另外流控窗口分连接级与流级两层,分别计算,只看一层会估错实际可用的发送窗口。

基本信息

协议依据RFC 9113(HTTP/2)
抓包字段http2.type == 4 即 SETTINGS 帧
常见参数最大并发流数、初始窗口大小、最大帧大小、头部列表大小
确认机制对端必须回复带确认标志的 SETTINGS
窗口层级连接级与流级分别计算

典型使用场景

  • 并发能力核对:确认服务端允许的并发流数是否符合预期
  • 流控排查:初始窗口大小直接影响单个流的传输节奏
  • 版本对比:升级或调整配置前后参数是否发生变化
  • 协议异常识别:SETTINGS 长期未被确认说明实现存在问题
  • 大对象分片分析:最大帧大小决定载荷的切分粒度

过滤与核对

过滤与核对
http2.type == 4                             # SETTINGS 帧
http2.type == 4 && http2.flags.ack == 1     # 对端的确认帧
http2.settings.id == 4                      # 初始窗口大小项
# 逐项核对实际协商出的连接级参数取值

关键参数与影响

参数影响异常表现
最大并发流数同时进行的流数量上限资源请求排队而非报错,页面只是变慢
初始窗口大小单流起始可发送的数据量大对象传输起步阶段偏慢
最大帧大小单帧载荷上限大对象被切成更多帧,处理开销上升
头部列表大小头部压缩表的容量上限头部过多时压缩效率下降
服务端调低并发上限时,多资源页面表现为请求排队等待而不直接报错,用户侧看到的只是资源加载慢,需要抓包才能确认原因。
连接级与流级窗口分开计算,估算可用发送量时必须把两层都算进去,只看流级窗口会明显低估限制所在。

易错点

  • 只在流级看窗口会估错可用窗口,连接级窗口同样会限制发送,两层都要核对
  • 服务端降低并发上限时页面只是变慢而不报错,容易被误判为带宽不足或网络质量问题
  • SETTINGS 需要被对端确认,长时间没有确认帧是协议层面的异常信号,不要当成协商已完成
  • 把初始窗口调大并不必然提升吞吐,还要看带宽时延积与接收侧读取速度,单点调参往往无效

数据来源与参考

  • RFC 9113(SETTINGS)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌