Skip to content

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)。

Based on Spring Framework.