RequestSize GatewayFilter 工厂
当请求大小超过允许的限制时,RequestSize GatewayFilter 工厂可以阻止该请求到达下游服务。 该过滤器接受一个 maxSize 参数。 maxSize 是一个 DataSize 类型,因此值可以定义为数字后跟可选的 DataUnit 后缀,如 'KB' 或 'MB'。默认为 'B'(字节)。 它是允许的请求大小限制(以字节为单位)。
以下示例配置了一个 RequestSize GatewayFilter:
application.yml
yaml
spring:
cloud:
gateway:
routes:
- id: request_size_route
uri: http://localhost:8080/upload
predicates:
- Path=/upload
filters:
- name: RequestSize
args:
maxSize: 5000000当请求由于大小原因被拒绝时,RequestSize GatewayFilter 工厂将响应状态设置为 413 Payload Too Large,并带有一个额外的 errorMessage Header。以下示例显示了这样一个 errorMessage:
errorMessage : Request size is larger than permissible limit. Request size is 6.0 MB where permissible limit is 5.0 MB注意
如果在路由定义中未作为过滤器参数提供,默认请求大小限制设置为 5 MB。
补充教学 —— 为什么要限制请求大小?
1. 防止 DoS 攻击 这也是一种安全防护手段。如果攻击者故意发送巨大的恶意请求(比如几个 G 的垃圾数据),可能会瞬间耗尽服务器的内存和带宽,导致服务瘫痪。
2. 保护后端服务 微服务架构中,后端服务(如图片处理服务、数据库服务)的处理能力是有限的。通过网关提前拦截超大请求,可以避免后端服务“消化不良”甚至崩溃。
注意:
- 这个过滤器计算的是 Header + Body 的总大小。
- 默认的 5MB 对于普通 API 足够了,但对于文件上传场景通常太小,切记要根据业务需求手动调大(如
maxSize: 100MB)。