首页 > 其他分享 >SpringBoot开启Gzip接口报文压缩

SpringBoot开启Gzip接口报文压缩

时间:2023-07-11 12:11:27浏览次数:48  
标签:feign SpringBoot ## 压缩 开启 gzip Gzip 报文

背景

当我们一个接口响应报文比较大的时候,超过几兆甚至几十兆的情况下,减少响应体的报文大小是能有效减少响应时间的。

spring boot 配置

server:
  compression:
    ## 开启服务端的报文压缩
    enabled: true
    ## 只压缩响应类型为application/json的报文
    mime-types: application/json
    ## 触发压缩报文的最小响应体大小,默认2048字节(2KB)
    min-response-size: 2048

默认配置为:
image


光服务端配置好还不能保证服务端的响应报文被压缩,还有以下流程:

  1. 客户端(浏览器)的请求头(request header)需要带上参数字段 Accept-Encoding :gzip, deflate
    image

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

  3. 客户端按照定好的格式进行报文解压工作。


  • 开启压缩前
    image

  • 开启压缩后
    image

开启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

默认配置为:
image

实现源码

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

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

避坑指南

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


我们项目中,有位已离职的同事写了这个配置,导致我们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请求压缩,则需要自己去尝试实现。

  1. 开启OkHttp,并关闭 httpClient
feign:
  httpclient:
    enabled: false
  okhttp:
    enabled: true
  1. okHttp有一套自己的玩法,
    image
    调试过程中,发现开启okHttp后,httpClient的代理失效了,因此我就不在往下探索了。
    可能需要自己配置 gzip encoder、gzip decoder,还有拦截器配置,感觉比较麻烦。

  2. 结论
    因此springboot项目中如果要开启gzip响应,最终还是不使用okHttp,减少接入复杂度、学习成本。
    即使okhttp的好处比较多:
    image

标签:feign,SpringBoot,##,压缩,开启,gzip,Gzip,报文
From: https://www.cnblogs.com/zgq7/p/17544290.html

相关文章

  • SpringBoot整合Caffeine本地缓存
    1、@Cacheable相关注解1.1相关依赖如果要使用@Cacheable注解,需要引入相关依赖,并在任一配置类文件上添加@EnableCaching注解<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency>1.2常......
  • 新版Springboot3.0打造能落地的高并发仿12306售票系统
    第1章课程介绍与学习指南3节|22分钟本章主要对课程做整体介绍,其中包括:课程要解决的问题、课程特色和亮点、课程内容安排、学完大家的收获,以及在学习方法上提出的建议与指导。 第2章12306这个系统架构到底有多牛?8节|71分钟本章主要对课程为什么选择12306课程作为实战......
  • 腾讯T3-3级资深架构师呕心整理:10万字节springboot教程全解!
    前言:可以毫不夸张地说,这篇文章介绍的SpringBoot教程基本已经涵盖你工作中遇到的大部分常用的场景。对于每一个springboot的用法,文中都会都会有详细的教程解释。本文总共从29个章节,248页PDF,阐述springboot在各种环境下的各种用法,文中给大家列举出部分的springboot教程,需要这份10......
  • 解决从springboot配置文件application.properties获取中文乱码
    这里因为自带的iso编码格式需要进行如下操作 新增两个文件重写packagecom.java.file.config;importorg.springframework.boot.origin.Origin;importorg.springframework.boot.origin.OriginTrackedValue;importorg.springframework.boot.origin.TextResourceOrigin;......
  • SpringBoot全局异常处理,返回数据附带http状态码,以及捕获404页面异常
    SpringBoot全局异常处理,返回数据附带http状态码,以及捕获404页面异常前言全局异常处理对于编写网络接口程序来说至关重要,能省掉很多的判断语句,让逻辑更加清晰。springboot中的全局异常处理并不难。与网上大部分文章不同的是,我用springboot自带的ResponseEntity给返回结果加上了了......
  • springboot配置文件
    1.配置文件1.1外部加载顺序命令行参数java-jarspring-boot-02-config-02.0.0.1-SNAPSHOT.jar--server.port=8087java-jarspring-boot-02-config-02.0.0.1-SNAPSHOT.jar--spring.profiles.active=prod来自java:comp/env的NDI属性Java系统属性(System.getPro......
  • SpringBoot集成JApiDocs实现自动生成接口文档
    一、概念JApiDocs是一个符合Java编程习惯的Api文档生成工具。最大程度地利用Java的语法特性,你只管用心设计好接口,添加必要的注释,JApiDocs会帮你导出一份漂亮的Html文档,并生成相关的Java和Object-C相关数据模型代码,从此,Android和IOS的同学可以少敲很多代码了,你也不......
  • SpringBoot+Mybatis搭建之采坑记录(持续更新...)
    Stoppingservice[Tomcat] 1.缺少Serivce注解无法启动tomcat 2.包名错误3.写了注解没写参数使用Eclipse调试Springboot项目时总是直接进入SilentExitExceptionHandler解决方案:Window-->Preference-->java-->debug-->Suspendexecutiononuncaughtexceptions选项前面的勾......
  • Eclipse搭建springBoot进阶篇-SpringBoot+Mybatis
    Eclipse搭建springBoot入门篇 在入门篇了搭建了一个简单的SpringBoot的Demo,在进阶篇将真正引入实战,也就是能支撑基本的企业中小型项目开发。本次通过springBoot+Mybatis+maven等搭建一个适用于开发中小型项目的简单架构pom文件需要更新maven的jar,对java包进行下载。<?xmlversi......
  • Eclipse搭建springBoot入门篇
    一、SpringBoot介绍SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,SpringBoot致力于在蓬勃发展的快速应用开发领域(rapidapplicati......