SpringBoot开启Gzip接口报文压缩
背景
当我们一个接口响应报文比较大的时候,超过几兆甚至几十兆的情况下,减少响应体的报文大小是能有效减少响应时间的。
spring boot 配置
server:
compression:
## 开启服务端的报文压缩
enabled: true
## 只压缩响应类型为application/json的报文
mime-types: application/json
## 触发压缩报文的最小响应体大小,默认2048字节(2KB)
min-response-size: 2048
默认配置为:

光服务端配置好还不能保证服务端的响应报文被压缩,还有以下流程:
客户端(浏览器)的请求头(request header)需要带上参数字段 Accept-Encoding :gzip, deflate

服务端的响应头(response header)返回参数字段 Content-Encoding : gzip

客户端按照定好的格式进行报文解压工作。
开启压缩前

开启压缩后

开启feign请求响应报文压缩
配置
feign:
compression:
request:
## 开启feign请求压缩
enabled: true
## 压缩报文类型
mime-types: text/xml,application/xml,application/json
## 请求体大于2048字节则开启
min-request-size: 2048
response:
## 开启feign请求压缩
enabled: true
## 使用gzip解码
useGzipDecoder: true
默认配置为:

实现源码
如果开启feign响应压缩,则添加feign请求拦截器,并在请求头中添加字段 Accept-Encoding :gzip, deflate

如果开启feign请求压缩,则添加feign请求拦截器,判断需要的响应体类型、请求体大小判断是否让响应体开启gzip报文压缩。

避坑指南
当项目中开启了OkHttpClient时,会让feign.compression 配置失效。

我们项目中,有位已离职的同事写了这个配置,导致我们feign开启gzip一直失败、报错。
@Configuration
@ConditionalOnClass(Feign.class)
@AutoConfigureBefore(FeignAutoConfiguration.class)
public class FeignOkHttpConfig {
@Bean
public okhttp3.OkHttpClient okHttpClient(){
return new okhttp3.OkHttpClient.Builder()
//设置连接超时
.connectTimeout(10, TimeUnit.SECONDS)
//设置读超时
.readTimeout(10, TimeUnit.SECONDS)
//设置写超时
.writeTimeout(10,TimeUnit.SECONDS)
//是否自动重连
.retryOnConnectionFailure(true)
.connectionPool(new ConnectionPool())
//构建OkHttpClient对象
.build();
}
}
如果非得用okHttp,并支持feign请求压缩,则需要自己去尝试实现。
- 开启OkHttp,并关闭 httpClient
feign:
httpclient:
enabled: false
okhttp:
enabled: true
okHttp有一套自己的玩法,

调试过程中,发现开启okHttp后,httpClient的代理失效了,因此我就不在往下探索了。
可能需要自己配置 gzip encoder、gzip decoder,还有拦截器配置,感觉比较麻烦。结论
因此springboot项目中如果要开启gzip响应,最终还是不使用okHttp,减少接入复杂度、学习成本。
即使okhttp的好处比较多:

SpringBoot开启Gzip接口报文压缩的更多相关文章
- springboot开启gzip压缩
springboot 2.x开启gzip压缩 1.application.yml配置 server: compression: enabled: true min-response-size: mim ...
- nginx 开启gzip压缩
Nginx开启Gzip压缩功能, 可以使网站的css.js .xml.html 文件在传输时进行压缩,提高访问速度,! Web网站上的图片,视频等其它多媒体文件以及大文件,因为压缩效果不好,所以对于 ...
- SpringBoot系列教程Web篇之开启GZIP数据压缩
本篇可以归纳在性能调优篇,虽然内容非常简单,但效果可能出乎预料的好: 分享一个真实案例,我们的服务部署在海外,国内访问时访问服务时,响应有点夸张:某些返回数据比较大的接口,耗时在 600ms+上,然而 ...
- 前端性能优化成神之路-HTTP压缩开启gzip
什么是HTTP压缩 HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法. HTTP采用通用的压缩算法,比如gzip来压缩HTML,Javascript, CSS文件. 能大大减少 ...
- Nginx 开启gzip 压缩
随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,今天我们来看看nginx的gzip压缩到底是怎么压缩的呢? gzip(GNU-ZIP)是一种压缩技术. 经过gz ...
- CentOS下Apache开启Gzip网页压缩功能
1.进入/etc/httpd/conf下打开httpd.conf文件 开启Gzip压缩功能,即去掉LoadModule deflate_module modules/mod_deflate.so这行前 ...
- Nginx开启GZIP来压缩网页
HTTP协议上的GZIP编码是一种用来改进web应 用程序性能的技术.大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度.这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中 ...
- Nginx开启Gzip压缩
.Vim打开Nginx配置文件 vim /usr/local/nginx/conf/nginx.conf .找到如下一段,进行修改 gzip on; gzip_min_length 1k; gzip_ ...
- 【转载】HttpWebRequest开启gzip压缩简介
在用HttpWebRequest对象时,一般我们都没有开启gzip压缩,如果服务端返回的数据比较大,这是我们需要开启gzip压缩,怎么开启呢? 1.给HttpWebRequest对象,添加如下Head ...
- 如何在 apache 中开启 gzip 压缩服务
服务器设置 gzip 压缩是 web 开发里很普遍的做法.假设你要请求一个 100k 的文件,网络传输速度为 50k/s,需要 2s 才能得到数据,但是如果在服务器设置了 gzip 压缩,将服务端的文 ...
随机推荐
- 【转载】 使用Python的ctypes查看内存
=================================================================== 原文地址: https://zhuanlan.zhihu.com ...
- 为什么不建议在华为技术论坛(昇腾论坛/mindspore技术论坛)发表帖子和技术博客
华为的硬件设计技术在国内没得说,华为的硬件制造技术基本就没听说过,而华为的软件技术可是出了名的不咋样.一年前曾经在昇腾的页面进入到华为技术论坛,并且发了几篇关于mindspore的编译问题的帖子,由于 ...
- JMH:基准测试工具套件-应用
1.背景 多线程性能测试 JMH:简介 JMH is a Java harness for building, running, and analysing nano/micro/milli/macr ...
- vue之element图标库使用与第三方阿里云图标库使用
1.背景 2.element图标库使用 假设要做一个如下效果 代码如下: <!-- 输入框--> <el-form label-width="0px" class ...
- 【全】CSS动画大全之按钮【b】
效果预览 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...
- 使用jquery的tmpl构建复杂表格
Tmpl提供了几种tag:${}:等同于{{=}},是输出变量,通过了html编码的.{{html}}:输出变量html,但是没有html编码,适合输出html代码.{{if }} {{else}}: ...
- 安卓如何设置开机启动某个程序?init.rc给你搞定
一.如何设置开机启动某个程序? 1.需求描述 最近有个项目需要在Android开机启动之后,自动执行一个C语言编写的程序:pengd 该程序运行时需要修改网络ip地址及其他网络操作,所以需要root权 ...
- B2B进销存ERP后台管理系统的逻辑架构与设计,AxureRP原型产品经理实战案例
模块分析: 进销存系统是一种用于企业管理库存.销售和采购活动的信息系统.它的主要作用包括但不限于以下几个方面: 1.库存管理 实时库存跟踪:准确记录每种商品的库存数量,确保数据的实时性和准确性. 库存 ...
- Zabbix创建模板(templates)及监控项(item)
Zabbix监控--Zabbix创建模板(templates)及监控项(item) 生产环境中,有一个简单的原则,那就是无监控不上线,监控系统开源方案中,zabbix也算不错的选择.由于其系统接口的开 ...
- 使用 nuxi build 命令构建你的 Nuxt 应用程序
title: 使用 nuxi build 命令构建你的 Nuxt 应用程序 date: 2024/8/30 updated: 2024/8/30 author: cmdragon excerpt: n ...