SpringBoot中开启GZIP压缩的方式

 更新时间:2025年04月21日 09:20:42   作者:无名指的等待712  
这篇文章主要介绍了SpringBoot中开启GZIP压缩的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前言

首先GZIP压缩有哪些好处了解一下先:

  • 1.减小响应体大小
  • 2.提升页面的加载速度
  • 3.节省带宽成本
  • 4.优化移动端的体验(主要是一般在移动端设备上,网络带宽通常是比较慢的,启用可以有效提升速度)
  • 5.更有效的缓存利用
  • 6.改善SEO搜索引擎优化

开启GZIP压缩方式

第一种

server:
  compression:
    enabled: true
    min-response-size: 1024  # 只有响应体大于 1KB 时才压缩
    mime-types: # 下面的是响应体的格式是这些的时候会压缩
      - application/json
      - application/xml
      - text/html
      - text/plain
      - text/css
      - application/javascript
  • 未开启GZIP的响应头

  • 开启GZIP后的响应头

这里可能你目前响应体返回的内容短的时候你看不出来,但是一旦响应较长的内容,你就能看到响应时间和渲染时间明显的加速

第二种

如果你想进行更精细的控制,可以通过编程的方式来启用和配置 GZIP 压缩。

例如,使用 WebMvcConfigurer 来自定义压缩策略:

import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public ServletRegistrationBean<Filter> compressionFilter() {
        // 可以自定义压缩逻辑的 Filter(可选)
        Filter compressionFilter = new GzipFilter();
        ServletRegistrationBean<Filter> registrationBean = new ServletRegistrationBean<>(compressionFilter);
        registrationBean.addUrlPatterns("/api/*"); // 指定哪些 URL 需要压缩
        return registrationBean;
    }
}

第三种

尽管 Spring Boot 可以在应用层进行 GZIP 压缩,通常在生产环境中使用 Nginx 或 Apache 等反向代理服务器进行 GZIP 压缩更为高效,因为反向代理通常比应用服务器更擅长处理静态内容的压缩。

http {
    gzip on;
    gzip_types application/json application/xml text/html text/plain text/css application/javascript;
    gzip_min_length 1024;
}

总结

  • 默认情况下,Spring Boot 不启用 GZIP 压缩
  • 你可以通过在 application.propertiesapplication.yml 中配置来启用它。
  • 启用 GZIP 后,只有当响应体的大小大于指定的 min-response-size 时,才会进行压缩,默认值是 2048 字节(2 KB)。

强调开启GZIP的好处有哪些?

1.减小响应体大小

  • 压缩数据:GZIP 压缩能够显著减小响应体的大小,尤其是对于 JSON、HTML、CSS、JavaScript 等文本格式的数据。通常,文本数据能被压缩到原来的 20% 到 30% 左右,甚至更多,这有助于节省带宽。
  • 减少数据传输:压缩后的数据更小,意味着从服务器到客户端传输的数据量减少,这对于网络带宽有限的环境尤其重要。

2. 提升页面加载速度

  • 更快的加载速度:响应体变小后,传输时间减少,客户端(如浏览器)能够更快地获取到数据,从而加快页面渲染或 API 请求的响应速度。
  • 改善用户体验:压缩后的响应能够减少页面加载时间,提升用户体验,尤其是在移动端或网络条件不佳的环境中。

3. 节省带宽成本

  • 降低带宽消耗:对于需要处理大量请求的服务器,GZIP 压缩能够有效减少带宽消耗,从而减少服务器的带宽成本。
  • 适应大流量应用:在高并发的情况下,压缩能够缓解带宽压力,提高服务的可伸缩性。

4. 优化移动端体验

  • 改善移动网络条件下的性能:在移动设备上,网络带宽通常较慢,启用 GZIP 压缩可以显著提升应用在 3G/4G 等不稳定网络环境下的响应速度。
  • 减少流量使用:移动设备的流量通常有限,压缩后的响应能够减少流量消耗,有利于用户节省流量。

5. 更有效的缓存利用

  • 优化缓存策略:在某些场景下,压缩后的响应体能更好地适应 HTTP 缓存机制。尤其是通过缓存代理(如 CDN 或缓存服务器)时,压缩响应能帮助缓存内容更有效地传输并存储。
  • Vary 头部支持:如果使用 Vary 头部来处理不同的请求,例如,响应的内容可能会因客户端的 Accept-Encoding 请求头而有所不同。启用 GZIP 后,缓存代理可以更精确地缓存不同版本的响应。

6. 减少服务器负担

  • 减轻应用服务器压力:虽然压缩会增加服务器端的 CPU 负担(因为需要对响应体进行压缩),但它能够通过减小传输数据量来减少带宽压力,特别是在高流量的场景下,服务器的网络带宽瓶颈可能比 CPU 成为瓶颈更早,从而间接优化了服务器性能。
  • 适用于大流量应用:对于高并发、大流量的应用,GZIP 压缩可以帮助有效降低带宽需求,从而提高整体服务的性能和稳定性。

7. 改善 SEO 和 Google PageSpeed

  • 优化 SEO(搜索引擎优化):虽然 GZIP 压缩本身并不会直接影响 SEO,但压缩可以加速网页加载时间,搜索引擎(如 Google)通常会将加载速度作为排名的一项指标。因此,启用 GZIP 压缩可能间接地帮助提高网站的 SEO 排名。
  • 提升 Google PageSpeed:Google PageSpeed 工具通常建议开启压缩,以提高页面性能评分。启用 GZIP 压缩有助于提升 PageSpeed 评分,优化用户体验。

8. 支持现代浏览器的自动解压缩

  • 浏览器支持:现代浏览器(如 Chrome、Firefox、Safari 等)都支持 GZIP 解压缩。客户端在收到压缩的响应后,浏览器会自动进行解压并呈现数据,不需要前端开发者额外处理。
  • 无需手动解压:对于客户端来说,GZIP 解压缩是自动的,不需要开发者介入,简化了开发工作。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Kafka消费客户端协调器GroupCoordinator详解

    Kafka消费客户端协调器GroupCoordinator详解

    这篇文章主要为大家介绍了Kafka消费客户端协调器GroupCoordinator使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Mybatis 插件原理解析

    Mybatis 插件原理解析

    mybatis是一款优秀的ORM开源框架,这个框架具有极强的灵活性,本文再次给大家介绍Mybatis 插件原理,感兴趣的朋友一起看看吧
    2021-10-10
  • 使用Java手搓一个控制台进度条打印工具

    使用Java手搓一个控制台进度条打印工具

    这篇文章主要为大家详细介绍了如何使用Java手搓一个控制台进度条打印工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-04-04
  • java和matlab画多边形闭合折线图示例讲解

    java和matlab画多边形闭合折线图示例讲解

    由于要将“哈密顿回路问题(TSP)”的求解中间结果表示出来,查了一下使用程序画多边形图形。现在在总结一下,这个图是“由给定节点首尾相连的”闭合多边形
    2014-02-02
  • SpringBoot下载文件的正确解法方式

    SpringBoot下载文件的正确解法方式

    这篇文章主要给大家介绍了关于SpringBoot下载文件的正确解法方式,SpringBoot是一款流行的框架,用于开发Web应用程序,在使用SpringBoot构建Web应用程序时,可能需要实现文件下载的功能,需要的朋友可以参考下
    2023-08-08
  • Java实现线程通信的案例讲解

    Java实现线程通信的案例讲解

    所谓线程通信就是线程间相互发送数据,线程通信通常通过共享一个数据的方式实现。本文将通过案例详解Java中线程通信的实现,感兴趣的可以了解一下
    2022-05-05
  • SpringBoot集成validation校验参数遇到的坑

    SpringBoot集成validation校验参数遇到的坑

    这篇文章主要介绍了SpringBoot集成validation校验参数遇到的坑,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 全面了解OAuth 2.0四种授权方式金三银四无惧面试

    全面了解OAuth 2.0四种授权方式金三银四无惧面试

    这篇文章主要介绍了全面了解OAuth 2.0四种授权方式金三银四无惧面试,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • jdk15的安装与配置全过程记录

    jdk15的安装与配置全过程记录

    这篇文章主要给大家介绍了关于jdk15的安装与配置,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Spring Security OAuth2集成短信验证码登录以及第三方登录

    Spring Security OAuth2集成短信验证码登录以及第三方登录

    这篇文章主要介绍了Spring Security OAuth2集成短信验证码登录以及第三方登录,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04

最新评论