如何在Jetty 12中通过编程方式设置最大请求大小?
Jetty 12 增大请求大小的编程式配置方案
Jetty 12对请求大小限制的配置逻辑和旧版本差异较大,你之前的方法无效是因为配置对象和属性已变更,以下是针对Jetty 12.0.10 + Java 21的有效配置方式:
1. 核心请求内容大小限制
首先需要设置整个HTTP请求的最大内容大小(包含请求体),通过HttpConfiguration的setMaxRequestContentSize方法实现,这是全局生效的基础配置:
HttpConfiguration httpConfig = new HttpConfiguration(); // 设置最大请求内容大小为100MB httpConfig.setMaxRequestContentSize(100 * 1024 * 1024);
注意:你之前调用的
setRequestHeaderSize仅控制请求头的大小,和请求体无关,所以无法解决断开连接的问题。
2. 表单提交内容限制(application/x-www-form-urlencoded)
如果你的场景包含表单提交,Jetty默认对表单内容有1MB左右的单独限制,需要通过FormConfig单独配置:
// 创建表单配置对象并设置大小限制 FormConfig formConfig = new FormConfig(); formConfig.setMaxFormContentSize(100 * 1024 * 1024); // 100MB // 可选:设置表单允许的最大键值对数量,默认1000,按需调整 formConfig.setMaxFormKeys(10000); // 将配置绑定到Servlet上下文 ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setAttribute(FormConfig.class.getName(), formConfig);
旧版本的
org.eclipse.jetty.server.Request.maxFormContentSize属性在Jetty 12中已被废弃,不再生效。
3. 文件上传内容限制(multipart/form-data)
如果涉及文件上传(multipart类型请求),还需要额外配置MultipartConfigElement:
// 配置文件上传参数:临时目录、单个文件大小、总文件大小、内存缓存阈值 MultipartConfigElement multipartConfig = new MultipartConfigElement( null, // 使用系统默认临时目录 100 * 1024 * 1024, // 单个文件最大100MB 100 * 1024 * 1024, // 请求中所有文件总大小100MB 0 // 超过0字节就写入临时文件,可按需调整 ); // 全局配置文件上传规则 ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setInitParameter("org.eclipse.jetty.multipartConfig", multipartConfig.toString());
根据你的实际请求类型,选择对应的配置组合即可解决请求过大导致的断开问题。
内容的提问来源于stack exchange,提问作者Doua Beri
相关产品推荐
相关产品推荐

