内容编码是什么
内容编码表示实体在传输前被压缩或做过其他编码处理,取值常见 gzip、deflate、br:客户端在请求头里用 Accept-Encoding 声明自己能接受哪些编码,服务端挑一种并在响应头里用 Content-Encoding 告知。排查「响应变慢」时要区分压缩开销与传输节省:文本类接口压缩后的净收益通常明显,而图片、视频这类已压缩内容再压一次收益有限,反而多消耗一点处理资源。
基本信息
| 适用平台 | Wireshark / tshark 解析的 HTTP 明文流量(HTTP/1.1) |
|---|---|
| 过滤字段 | http.content_encoding、http.accept_encoding |
| 常见取值 | gzip、deflate、br、identity |
| 查看方式 | Wireshark 可显示解压后的实体内容,便于对照 |
典型使用场景
- 判断响应体积偏大是内容本身大还是没有启用压缩
- 核对客户端是否真的声明了可接受的编码
- 评估网关改写编码对前后端行为的影响
- 排查客户端解压失败类报错,确认编码取值与实现匹配
- 对比启用压缩前后的传输字节数,量化收益
- 为静态资源与接口分别制定压缩策略提供数据
对比观察
对比观察
http.accept_encoding contains "gzip" # 请求侧声明
http.content_encoding contains "gzip" # 响应侧实际取值
# 实体大小对比: 压缩后与解压后(Wireshark 可查看解压内容)
# 若 Accept-Encoding 有声明而响应无编码,说明服务端或网关未启用
# 已压缩格式(图片/视频)再次压缩收益有限,通常不值得字段逐项读法
| 字段 | 含义 | 异常信号 |
|---|---|---|
| Accept-Encoding | 客户端可接受的编码列表 | 缺失说明客户端不支持压缩 |
| Content-Encoding | 实体实际使用的编码 | 与声明不匹配会导致解压失败 |
| 压缩后长度 | 传输层实际字节数 | 与解压后差异小说明内容本身不可压 |
| 解压后长度 | 应用真正处理的数据量 | 评估节省要以此为基准 |
抓包里显示的实体长度是压缩态,评估传输节省要拿解压后的尺寸对比,单看压缩后长度会低估原始数据量。
中间设备可能改写或移除编码声明,出现响应无法解析时以实际收到的报文头与字节为准。