首页/网络/协议速查/Max-Forwards 转发跳数限制
HTTP 头与缓存70 条

Max-Forwards 转发跳数限制

限制请求可被转发的剩余跳数(每经一跳代理减一):减到 0 的节点必须直接响应而不是继续转发;主要用于 TRACE/OPTIONS 诊断。

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

Max-Forwards 是什么

Max-Forwards 限制请求还能被转发多少跳:每经过一个使用该字段的代理就减一,减到 0 的节点必须直接响应而不能再转发(RFC 9110 §7.6.2)。它的主要用途是诊断——通过逐步调整跳数,判断链路上哪一跳在响应、哪一跳丢弃或改写了请求。

基本信息

名称Max-Forwards
方向请求头
规范RFC 9110 §7.6.2
取值范围非负十进制整数
典型方法TRACE、OPTIONS
语义逐跳递减,值为 0 的节点必须直接回应

典型使用场景

  • TRACE 排查:逐跳定位链路上每个代理的行为
  • OPTIONS 探测:确认是哪一跳返回了能力信息
  • 网关审计:确认中间件是否实现该字段
  • 协议学习:理解逐跳头与端到端头的区别
  • 排障:判断请求被哪一跳丢弃或改写
  • 安全测试:验证链路对逐跳头的处理是否规范

逐跳定位

逐跳定位
# 让第 2 跳的节点直接回应(观察 Server 与 Via 判断是谁答的)
curl -si -X OPTIONS https://example.com/ -H 'Max-Forwards: 2' | head -5

# 依次尝试不同跳数,对比结果定位链路节点
for n in 0 1 2 3; do
  echo "== Max-Forwards: $n"
  curl -si -X OPTIONS https://example.com/ -H "Max-Forwards: $n" | grep -iE '^(HTTP|server|via)'
done

逐跳头与端到端头

类别语义典型成员
逐跳只作用于当前连接Connection、Keep-Alive、Max-Forwards、TE、Trailer、Upgrade
端到端需要转发到最终接收方Host、Authorization、Cache-Control、Content-Type
由 Connection 声明把任意头临时标记为逐跳如 Connection: X-Debug
诊断类帮助定位链路节点TRACE、Max-Forwards、Via
Max-Forwards 是应用层计数,与 IP TTL 不是一回事:TTL 管网络层跳数,由路由器自动递减。
支持度参差不齐:很多网关不实现它,因此「不同跳数返回相同结果」不代表链路只有一跳。
与 Via 头配合使用效果最好:Via 记录了请求经过的每一跳,可与 Max-Forwards 的递进结果互相印证。
该字段只对实现了它的节点生效,转发节点完全可以忽略,因此不能用于任何形式的访问控制。
规范要求实现该字段的代理在转发前把值减一;接收方收到 0 时必须自行应答,而不是继续转发。
它常与 OPTIONS 配合做「沿链路探测能力」:跳数越小,应答方越靠近客户端,据此可画出链路层级。

易错点

  • 把 Max-Forwards 当 TTL 用会误判:未实现该字段的节点不会递减,跳数就不准
  • 依赖它做安全控制没有意义:它是诊断工具,转发节点可以忽略
  • 用 Max-Forwards: 0 期待看到请求原文时,若链路上有节点不转发 TRACE,会得不到任何回应
  • 只改 Max-Forwards 不看 Via,很难确认究竟是哪一跳响应或丢弃了请求
  • 在客户端把该头写死为固定值,会让诊断失去逐跳递进的效果

数据来源与参考

  • RFC 9110 §7.6.2 Max-Forwards

相关工具

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