1、服务器配置
服务端开启的数据压缩配置
server:port: ${port:8881}servlet:# 应用上下文路径context-path: /orderserverundertow:threads:io: 4worker: 500buffer-size: 2048# 开启Gzip压缩,compression:# 开启压缩enabled: true# 对json格式内容进行压缩mime-types: application/json# 响应体超过5KB需要进行压缩---默认只压缩超过2KB的数据min-response-size: 5120
2、uniapp的请求公共函数请求头
let HEADER= {"Accept-Encoding": "gzip", "content-type":method == "POST"? "application/json;charset=UTF-8": "application/json",token: uni.getStorageSync("userInfo").token}
3、压缩数据无法解析
在使用postman和jmeter进行测试的时候,都需要在请求头上添加"Accept-Encoding": "gzip",数据解压无误,数据都能完成自动解压,但是在uniapp的请求头上添加这个请求头,请求内容中的data是Unicode和其他编码的一个混合体,可以看到内容编码是gzip,当时
4、解压
当时只以为需要进行手动解压,但是使用pako进行gizp解压无效,还是更换axios请求框架需要更换请求适配器,无法完成解压
5、解决方案
去掉请求头"Accept-Encoding": "gzip",当时只以为不加这个请求头,服务端的响应数据不是压缩的,但是在服务端打印请求头的时候,发现前端请求头中自带"Accept-Encoding": "gzip",因此uniapp的请求的底层实现会自动解压
6、总结
1、uniapp的请求中的"Accept-Encoding": "gzip"为请求自带配置,不可修改与覆盖
2、既然uniapp的原生请求头中的"Accept-Encoding": "gzip"不可修改与覆盖,且请求头中的数据压缩格式只有 gzip,那么服务器的gzip, deflate, br这个三种压缩格式应该是只支持gzip一种,另外几种大概率不支持
3、拓展:服务器 数据压缩可以将响应json数据压缩成字符,放在响应的data中,客户端需要根据后端的压缩方式进行对应解压,此方案也可以用于客户端对请求数据进行压缩,服务器根据对应压缩方案实现一个对应的解压工具进行解压