首页/网络/协议速查/TE 传输编码协商
HTTP 头与缓存70 条

TE 传输编码协商

客户端声明可接受的传输编码(transfer-coding),如 trailers 与 gzip;作用于「逐跳传输」而非内容本身。

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

TE 是什么

TE 是请求头,声明客户端在当前这条连接上可接受的传输编码(transfer-coding),并用于表示是否愿意接收分块报文尾部的字段(trailers)。它作用在逐跳的传输语义上,与表示压缩的 Accept-Encoding 不是一回事:TE 管传输,Accept-Encoding 管内容本身(RFC 9110 §10.1.4)。

基本信息

名称TE
方向请求头
规范RFC 9110 §10.1.4
常见取值gzip、compress、deflate、trailers
关键值trailers 表示愿意接收分块尾部字段
区分项Accept-Encoding 管表示压缩,Transfer-Encoding 管报文自身编码

典型使用场景

  • gRPC 与移动端:客户端用 TE: trailers 接收尾部状态字段
  • 网关配置:确认代理是否转发 TE 并保留 trailer
  • 协议实现者:分离传输编码与内容编码两套逻辑
  • 排障:分块响应丢失尾部字段的根因定位
  • 性能分析:判断传输层压缩是否被链路支持
  • 兼容性测试:模拟不同 TE 取值观察服务端行为

取值与验证

取值与验证
# 声明接受分块报文的尾部字段(gRPC 等协议的常见写法)
TE: trailers

# 表示层压缩由另一个头协商,两者含义不同、不能互相替代
Accept-Encoding: gzip, br

# 观察服务端是否按 TE 返回尾部字段
curl -sv --raw https://api.example.com/stream 2>&1 | grep -iE 'trailer|transfer-encoding'

编码相关头部对照

头部作用范围典型值
TE逐跳传输能力协商trailers
Transfer-Encoding报文自身的传输编码chunked
Accept-Encoding表示层压缩协商gzip、br
Content-Encoding实体实际使用的压缩gzip、br
除 trailers 之外的取值(gzip 等)在实际实现中几乎被忽略;写解析器时仍需按语法兼容,避免遇到旧实现直接报错。
TE 与 Transfer-Encoding 都属于逐跳头,代理必须自行处理,不能原样透传给下游。
若链路中有代理不支持 trailer,gRPC 这类依赖尾部状态传输的协议会直接失败,因此上线前必须做端到端验证。
客户端若在 TE 里声明 trailers,服务端才可以发送尾部字段;没有这条声明时,服务端应当把这类元数据放到头部或改用其他机制。
TE 默认是可选协商,服务端不响应也不会报错;排查「尾部字段消失」时应同时检查请求里的 TE 与链路上每个代理的转发配置。

易错点

  • 把 TE 当 Accept-Encoding 用,会导致压缩协商失效
  • 代理未转发 TE: trailers,会让 gRPC 客户端拿不到尾部状态而报错
  • 用 TE 的 gzip 取值期待传输层压缩,多数服务器根本不解析,属于无效配置
  • 忽略逐跳语义把 TE 原样透传,可能让下游按错误的编码假设解析报文

数据来源与参考

  • RFC 9110 §10.1.4 TE
  • RFC 9112 §7(传输编码)

相关工具

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