当前位置:网站首页>Flutter实战-请求封装(四)之gzip报文压缩
Flutter实战-请求封装(四)之gzip报文压缩
2022-08-04 17:01:00 【蓝面书生】
用了两年的flutter,有了一些心得,不虚头巴脑,只求实战有用,以供学习或使用flutter的小伙伴参考,学习尚浅,如有不正确的地方还望各路大神指正,以免误人子弟,在此拜谢~(原创不易,转发请标注来源和作者)
注意:无特殊说明,flutter版本为3.0+
上篇我们对flutter的dio请求做了http2的改造,这篇我们来探讨如何进行gzip报文压缩的改造。
一.何为gzip,为什么我们要使用gzip
gzip是一种文件压缩技术,Http上的gzip编码是一种通过对报文压缩来改进web应用程序性能的技术。使用了gzip后,可以节省带宽,加快访问速度。
如果我们要使用gzip,要求服务器端和客户端要同时支持gzip。
工作原理
(图片来源于网络)
二.服务器支持gzip
#gzip模块设置 gzip on; #开启gzip压缩输出 决定是否开启gzip模块,on表示开启,off表示关闭;gzip_min_length 1k; #最小压缩文件大小 gzip_buffers 4 16k; #压缩缓冲区 gzip_http_version 1.1; #压缩版本 gzip_comp_level 2; #压缩等级,等级越底压缩速度越快文件压缩比越1gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。 gzip_vary on; #启用应答头"Vary: Accept-Encoding" #limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用
三.客户端支持gzip
这里我只进行了返回参数的压缩
1.添加gzip标识
dio = Dio(BaseOptions(
responseDecoder: gzipDecoder,
headers: {"content-encoding": "gzip", "accept-encoding": "gzip"},
));
2.实现gzipDecoder
String gzipDecoder(List<int> responseBytes, RequestOptions options, ResponseBody responseBody) {
if (isGzipped(responseBytes)) {
return utf8.decode(gzip.decode(responseBytes));
} else {
return utf8.decode(responseBytes);
}
}bool isGzipped(List<int> byte) {
if (byte.length < 2) {
return false;
}
return ((byte[0].toUnsigned(64)) & 0xff | ((byte[1] << 8).toUnsigned(64) & 0xff00)) == 0x8b1f;
}
边栏推荐
- 【Gazebo入门教程】第二讲 模型库导入与可视化机器人建模(模型编辑器)
- 数字化金融企业的产品体系长啥样?
- Digital-intelligent supply chain management system for chemical manufacturing industry: build a smart supply system and empower enterprises to improve production efficiency
- taro 滚动组件ScrollView
- Clearance sword refers to Offer——The sword refers to Offer II 010. and the sub-array of k
- Boost library study notes (1) Installation and configuration
- dotnet core 隐藏控制台
- Analysis of the gourd baby
- Cesium快速上手0-Cesium安装与基本介绍
- 接口测试项目(非常值得练手)
猜你喜欢
NLP未来,路在何方?从学术前沿和业界热点谈起
移动平台助力推进智慧型科研院所信息化建设
水能自发变成“消毒水”,83岁斯坦福教授:揭示冬天容易得流感的部分原因...
Hubei Mobile ZTE B860AV2.1_S905L_ flash firmware package
What does the product system of a digital financial enterprise look like?
Mobile BesTV_R3300-L_S905L_8189_wire brush firmware package
Hubei Telecom Tianyi TY1608_S905L3B_MT7668_ card brush firmware package
学习探索-网站中引入百度统计
Unity Apple登录接入
Selenium Webdriver驱动自管理
随机推荐
CSDN21天学习挑战赛——程序流程控制(02)
【笔试题】-【日常记录】
Hubei Mobile ZTE B860AV2.1_S905L_ flash firmware package
R语言使用cov函数计算矩阵或者dataframe数据变量之间的协方差、cor函数计算相关性、cor函数通过method参数指定相关性、相关性计算方法Pearson,Spearman, Kendall
Mobile Hisense IP102H_905L3-B_wire brush firmware package
icu是哪个国家的域名?icu是什么域名?
88. (the home of cesium) cesium polymerization figure
"Distributed cloud best practices" BBS, on August 11, shenzhen
越来越火的图数据库到底能做什么?
学习探索-网站中引入百度统计
美容院管理系统有哪些促销方式?
AtCoder Beginner Contest 262 部分题解
广东移动魔百盒M411A _905L3_线刷固件包
Hubei Telecom Tianyi TY1608_S905L3B_MT7668_ card brush firmware package
吃透Chisel语言.32.Chisel进阶之硬件生成器(一)——Chisel中的参数化
黑龙江移动新魔百盒M411A_2+8_S905L3A_线刷固件包
谷歌开发者社区推荐:《Jetpack Compose 从入门到实战》新书上架,带你踏上 Compose 开发之旅~
Unity Apple登录接入
【论文阅读】Decision Transformer: Reinforcement Learning via Sequence Modeling
浅谈运用低代码技术如何实现物流企业的降本增效