SpringBoot开启数据Gzip压缩

2,157 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情

在系统优化过程中,我们可能发现前端请求后台接口响应变慢,除了网络问题,就是接口请求的数据太大了,有的达到了几百 kb。返回的大量数据,占用的网络带宽也就越大,响应的时间也就越长,导致接口性能变差,这时开启 gzip 就非常有用了,可以压缩接口请求的数据,一般的json文本压缩比率很大,开启之后接口时间大幅下降!

浏览器默认是支持数据压缩的,会自动对 gzip 压缩的数据进行解压,F12 打开网络,可以看到请求头中会有: 'Accept-Encoding: gzip, deflate, br'。对响应数据开启压缩的最常见的方式有:使用 Nginx 配置;Spring boot 应用配置(本文介绍此种方式)。Jetty、Tomcat 和 Undertow 都支持 HTTP 响应压缩,对于内嵌的 Servlet 容器而言,直接在 application.properties、application.yml 中配置即可。

Spring Boot配置HTTP 响应内容压缩

Spring Boot 项目配置比较简单:

server:
  compression:
        #是否对响应数据开启gzip压缩,默认false
        enabled: true
        #响应内容长度超过设置大小时进行压缩,默认值为2048(2KB,不带单位时默认为字节)
        min-response-size: 10KB
        #对指定的响应类型进行压缩,值是数组,用逗号隔开
        mime-types: application/json

核心配合开启gzip压缩:server.compression.enabled=true

默认只压缩超过 2048 字节的数据,修改server.compression.min-response-size的值可以设置该大小。

默认情况下,只有在响应内容类型为以下内容时才会压缩响应:

  • text/html
  • text/xml
  • text/plain
  • text/css
  • text/javascript
  • application/javascript
  • application/json
  • application/xml

我们的接口返回的是 json 数据,所以修改下面的配置:

server.compression.mime-types=application/json

老版本的Spring boot的启用配置和新版本的不同,老版本的配置:

server.tomcat.compression=on
server.tomcat.compressableMimeTypes=application/json

如何查看 Gzip 是否开启成功

Google 浏览器打开 F12,切换到 NetWork 下,右键表头选择 Response Headers 下的Content-Encoding,如果开启了 Gzip,对应接口中的Content-Encoding中会有显示Content-Encoding:gzip

开启后的效果也是明显:

image.png