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 解压缩是自动的,不需要开发者介入,简化了开发工作。

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

相关文章

  • IDEA生成标准JavaBean的几种方法总结

    IDEA生成标准JavaBean的几种方法总结

    标准javaBean是定义一个类的标准结构,下面这篇文章主要给大家总结介绍了关于IDEA生成标准JavaBean的几种方法,文中通过图文以及代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • Java优化重复冗余代码的8种方式总结

    Java优化重复冗余代码的8种方式总结

    日常开发中,我们经常会遇到一些重复代码,最近小编优化了一些系统中的重复代码,用了好几种的方式,感觉挺有用的,所以本文给大家讲讲优化重复代码的几种方式
    2023-08-08
  • Java String的intern用法解析

    Java String的intern用法解析

    这篇文章主要介绍了Java String的intern用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • des加密解密JAVA与.NET互通实例

    des加密解密JAVA与.NET互通实例

    这篇文章主要介绍了des加密解密JAVA与.NET互通实例,大家参考使用吧
    2013-12-12
  • Spring使用@Autowired为抽象父类注入依赖代码实例

    Spring使用@Autowired为抽象父类注入依赖代码实例

    这篇文章主要介绍了Spring使用@Autowired为抽象父类注入依赖代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Spring代理对象导致的获取不到原生对象注解的解决

    Spring代理对象导致的获取不到原生对象注解的解决

    本文主要介绍了Spring代理对象导致的获取不到原生对象注解的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Java 基于UDP协议实现消息发送

    Java 基于UDP协议实现消息发送

    这篇文章主要介绍了Java 基于UDP协议实现消息发送,帮助大家更好的理解和学习Java网络编程,感兴趣的朋友可以了解下
    2020-11-11
  • Java设计图形与多媒体处理

    Java设计图形与多媒体处理

    本文主要介绍了Java的图形设计以及多媒体处理,源码也做了详细的注释,对于初学者应该不难。详细请看下文
    2015-09-09
  • 详解Spring框架之基于Restful风格实现的SpringMVC

    详解Spring框架之基于Restful风格实现的SpringMVC

    这篇文章主要介绍了详解Spring框架之基于Restful风格实现的SpringMVC,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Java redisTemplate阻塞式处理消息队列

    Java redisTemplate阻塞式处理消息队列

    用redis中的List可以实现队列,这样可以用来做消息处理和任务调度的队列。因此,本文将主要为大家介绍如何利用redisTemplate处理消息队列,感兴趣的小伙伴可以了解一下
    2021-12-12

最新评论