Spring Cloud Gateway调用时返回413 Too Large错误根因咨询
413 Request Too Large 异常根本原因分析
以下按触发概率从高到低排序:
Heroku平台原生限制
- Heroku公共路由层默认限制单请求最大负载为30MB,若登录请求携带的表单数据、序列化参数总大小超过该阈值,平台会直接返回413,不会转发到你的API网关服务
- Heroku同时限制请求头总大小不得超过8192字节,若登录请求携带了过多Cookie、自定义认证头、或者过长的JWT身份凭证,即使请求体本身很小,也会触发413错误,该场景极易被误判为请求体过大
API网关配置限制
- 基于Resilience4j实现的API网关(多为Spring Cloud Gateway/Zuul)本身存在默认请求负载上限:
- 若为Spring Cloud Gateway,默认
spring.codec.max-in-memory-size配置为256KB,超出该阈值的请求会被网关直接拦截返回413 - 若为Zuul网关,默认请求负载上限为2MB,未手动调高的话也会触发拦截
- 若为Spring Cloud Gateway,默认
- 若网关层额外配置了请求全量日志采集、参数校验逻辑,需要将请求体完全读取到内存中处理时,超出内置内存缓冲区阈值也会抛出该异常
服务调用组件配置限制
- Feign客户端默认请求体大小上限为2MB,未手动调整配置的话,超出阈值的请求会被Feign自身拦截抛出413
- RestTemplate如果配置了自定义
ClientHttpRequestFactory,设置了缓冲区大小限制,超出阈值时也会触发同类错误
下游用户微服务配置限制
- 用户微服务的内置Web容器(Tomcat/Undertow/Jetty)存在默认请求大小限制:以Tomcat为例,默认
server.tomcat.max-http-form-post-size为2MB,server.max-http-header-size默认仅为8KB,阈值设置过低时也会返回413错误
内容的提问来源于stack exchange,提问作者Ankit Srivastava
相关产品推荐
相关产品推荐

