HTTP连接下GZIP压缩数据包分析:无1f 8b魔术字是否为GZIP格式
操作遗漏点说明
你当前拿到的数据包是Base64编码后的文本内容,并非原始二进制字节流,直接查看文本自然无法匹配GZIP的1f 8b魔术字特征,需要先完成Base64解码操作再做校验。
验证步骤
- 第一步:对获取到的Base64字符串做解码操作,得到原始二进制数据流
你提供的数据包内容:
先通过Base64解码工具/代码转换为二进制字节流,不要直接对文本字符串做特征匹配。nQKagsQrbtlG4FUE+gZ2DCg0xhv0jFjx4YRyhj6rWTeGp9CyxKVY6psWlA/w/VEqcnVcOdw1YGBNLKAjPLr6ZLDYRoId3M/rJI0Uva5MD13OO0J22t3bt3nH8g+euURPwTofmxzZT4pKb36S9pIPJLe4BY0CM5CgK06kIbPA1RpIk2ce2U3q0pShPD3NP4qz - 第二步:校验二进制流的GZIP特征
取解码后的二进制流前2个字节,若为0x1f 0x8b则符合标准GZIP格式,可正常用GZIP解压工具解压;若不符合则说明该数据不是GZIP压缩格式。
请求头补充说明
你贴出的请求头如下:
POST /api/myapi/myapp HTTP/1.1 user-agent: Dart/2.10 (dart:io) content-type: application/json; charset=utf-8 accept-encoding: gzip content-length: 194 host: api.myapi.com
注意其中accept-encoding: gzip仅代表客户端可接受服务端返回gzip压缩的响应,不代表客户端发送的请求体为gzip压缩格式,请求体的压缩格式需要通过content-encoding请求头字段确认,你提供的请求头中无该字段,结合content-type: application/json的配置,该场景大概率是先对原始JSON做GZIP压缩,再转Base64编码封装为JSON字符串传输。
内容的提问来源于stack exchange,提问作者Tamer Nassar
相关产品推荐
相关产品推荐

