RequestHeaderSize GatewayFilter 工厂
RequestHeaderSize GatewayFilter 工厂接受 maxSize 和 errorHeaderName 两个参数。
maxSize: 请求头允许的最大数据大小(包括 key 和 value)。支持单位后缀(如 B, KB, MB)。errorHeaderName: 设置包含错误消息的响应头名称,默认为 "errorMessage"。
以下示例配置了一个 RequestHeaderSize GatewayFilter:
application.yml
yaml
spring:
cloud:
gateway:
routes:
- id: requestheadersize_route
uri: https://example.org
filters:
- RequestHeaderSize=1000B作用: 如果任何一个请求头的大小超过 1000 字节,网关将返回 431 Request Header Fields Too Large 状态码。
补充教学 —— 为什么要限制请求头大小?
场景 1:防止缓冲区溢出攻击 (Buffer Overflow)
- 攻击方式:恶意攻击者可能会发送包含超大 Header 的请求,试图撑爆服务器的内存缓冲区。
- 防护:通过
RequestHeaderSize限制每个 Header 的大小,将其扼杀在网关层,保护后端服务。
场景 2:Cookie 过大导致的 400 错误
- 现象:有时候网站塞了太多的 Cookie,导致 Header 变得非常大。
- 问题:某些后端服务器(如旧版 Tomcat 或 Nginx)默认对 Header 大小有限制(通常是 4KB 或 8KB),超过就会报错。
- 网关层控制:在网关层显式定义规则,提前拦截不符合规范的请求,并返回明确的 431 错误,方便排查。