您提到的 gateway.compression.enabled 是 Spring Cloud Gateway 中一个非常实用的配置属性,它用于启用或禁用网关对下游服务返回的响应体进行 GZIP 压缩 的功能,从而减少网络传输的数据量,提升响应速度。

核心作用
当此开关启用,且下游微服务的响应头中包含 Content-Type 为可压缩类型(如 text/html, application/json 等),并且客户端请求的 Accept-Encoding 头中包含 gzip 时,Spring Cloud Gateway 会自动将响应体压缩后再返回给客户端。
注意:它压缩的是从网关到客户端这段的响应,微服务到网关之间的通信是否压缩,由微服务自己决定。
配置方式
您需要在 Spring Cloud Gateway 的配置文件中进行设置,通常是 application.yml 或 application.properties。
YAML 格式 (推荐)
spring:
cloud:
gateway:
# 全局压缩配置
compression:
enabled: true # 启用响应压缩
min-response-size: 1024 # 触发压缩的最小响应大小(字节),默认 1024
mime-types: # 支持压缩的 MIME 类型列表
- text/html
- text/xml
- text/plain
- text/css
- text/javascript
- application/javascript
- application/json
- application/xml
Properties 格式
spring.cloud.gateway.compression.enabled=true spring.cloud.gateway.compression.min-response-size=1024 spring.cloud.gateway.compression.mime-types=text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml
关键参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
enabled |
false |
核心开关,设为 true 以启用网关响应压缩。 |
min-response-size |
1024 |
触发压缩的最小响应体大小,响应体小于此值则不压缩,因为压缩小数据可能得不偿失,单位:字节。 |
mime-types |
一系列文本和 JSON/XML 类型 | 定义哪些 Content-Type 的响应会被压缩,默认已包含常见文本类型,您可以按需增删。 |
最佳实践与注意事项
-
何时启用?
- 主要用于公网或带宽有限的场景,特别是返回大量文本数据(如 API 响应、页面内容)时,压缩效果显著。
- 如果您的服务主要在内部高速网络运行,且响应主要是小数据或已压缩的二进制数据(如图片、视频),可以不启用,以节省网关的 CPU 资源。
-
与下游服务的关系
- 如果您的下游微服务已经配置了响应压缩(例如通过 Spring Boot 的
server.compression.enabled=true),那么网关再次压缩的收益不大,有时甚至会增加额外开销,通常建议只在一处进行压缩。 - 常见架构是:微服务不压缩,由统一的网关负责对外压缩,实现关注点分离。
- 如果您的下游微服务已经配置了响应压缩(例如通过 Spring Boot 的
-
客户端必须支持
- 客户端(浏览器、APP、其他服务)必须在请求头中携带
Accept-Encoding: gzip, deflate, br,网关才会返回压缩后的内容,现代浏览器和常用 HTTP 客户端库(如curl,axios,RestTemplate)默认都会发送此头。
- 客户端(浏览器、APP、其他服务)必须在请求头中携带
-
验证是否生效
- 使用
curl命令测试:# 使用 -H 指定接受 gzip 压缩 curl -H "Accept-Encoding: gzip" http://你的网关地址/你的路由 -v
- 观察响应头,如果压缩生效,你会看到
Content-Encoding: gzip。 - 也可以在浏览器的开发者工具 Network 标签中查看请求和响应头。
- 使用
示例配置片段
假设您有一个用户服务路由,并希望启用压缩:
spring:
cloud:
gateway:
compression:
enabled: true
min-response-size: 512 # 对大于512字节的响应就压缩
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/api/users/**
gateway.compression.enabled: true 是一个优化外部网络传输的有效手段,在面向互联网的 API 网关或需要传输较大文本数据的场景下,建议开启,并根据实际情况调整 min-response-size 和 mime-types。
如果你关心带宽和客户端加载速度,就开启它;如果网关和客户端都在内网且性能压力不大,可以保持关闭。