Jetty 9.4.41嵌入式服务设置MaxFormContentSize不生效如何解决?
问题根因
你配置的所有maxFormContentSize相关参数(包含系统属性、服务级属性、Servlet上下文级三个位置的配置)仅对Content-Type: application/x-www-form-urlencoded类型的表单POST请求生效,你测试使用的请求Content-Type为application/atom+xml,不属于表单提交场景,因此该阈值规则不会触发,不会返回大小超限错误。
修复方案
如果需要限制所有类型请求的最大内容长度,可通过以下方式配置:
全局连接器生效
在你初始化HttpConfiguration的代码段中新增setMaxRequestContentSize配置,该配置会对当前连接器下的所有请求生效,不区分Content-Type类型:
HttpConfiguration httpConfig = new HttpConfiguration(); httpConfig.setSendServerVersion(false); httpConfig.setSendXPoweredBy(false); // 新增如下配置,设置全局最大请求内容长度为700字节 httpConfig.setMaxRequestContentSize(700);
该配置同时支持Content-Length预判断和Transfer-Encoding: chunked分块请求的实时字节统计,超过阈值会直接返回413 Payload Too Large错误。
自定义粒度生效(可选)
如果需要针对不同路径、不同请求类型设置不同的阈值,可以自定义Jetty Handler做全局拦截,或者在对应Servlet的业务逻辑中先获取请求头Content-Length做大小判断,超过阈值直接返回413状态码即可。
内容的提问来源于stack exchange,提问作者Philippe Bertrand
相关产品推荐
相关产品推荐

