Spring Boot中如何为指定路径资源选择性开启/关闭gzip压缩
配置不生效的核心原因
你此前在application.properties中开启了Spring Boot内置的全局GZIP压缩,该压缩逻辑默认作用于所有请求,优先级高于你自定义的Filter,因此自定义路径规则不会生效。
具体解决方案
步骤1:关闭全局默认GZIP配置
修改application.properties,关闭内置全局压缩:
# 关闭Spring Boot自带的全局GZIP压缩 server.compression.enabled=false
其余server.compression开头的配置可以删除,后续会在自定义Filter中配置对应规则。
步骤2:完善自定义CompressingFilter注册逻辑
补充压缩规则的初始化参数,同时设置过滤器优先级保证规则生效:
import com.github.ziplet.filter.compression.CompressingFilter; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.core.Ordered; @Bean public FilterRegistrationBean<CompressingFilter> compressingFilterRegistrationBean() { FilterRegistrationBean<CompressingFilter> registration = new FilterRegistrationBean<>(); registration.setFilter(new CompressingFilter()); // 配置需要开启GZIP的路径 registration.addUrlPatterns("/stuff/*", "/example", "/something/*"); registration.setName(CompressingFilter.class.getSimpleName()); registration.setAsyncSupported(true); // 设置最高优先级,避免响应被其他过滤器提前处理导致压缩规则失效 registration.setOrder(Ordered.HIGHEST_PRECEDENCE); // 配置压缩规则,和你之前的全局配置保持一致 registration.addInitParameter("minCompressSize", "1024"); registration.addInitParameter("includeContentTypes", "text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json"); return registration; }
步骤3:验证配置是否生效
发送携带Accept-Encoding: gzip头的请求测试不同路径:
- 访问指定开启压缩的路径,响应头中存在
Content-Encoding: gzip说明压缩生效 - 访问其他路径,响应头中不存在
Content-Encoding: gzip说明路径规则生效
异常排查
如果仍不符合预期,优先排查:
- 服务前端是否有Nginx等反向代理开启了全局GZIP压缩,代理层的压缩会覆盖Spring Boot的配置逻辑
- 项目中是否存在其他全局压缩过滤器的配置
内容的提问来源于stack exchange,提问作者Johan
相关产品推荐
相关产品推荐

