关于maxPartCount和maxPartHeaderSize参数的限制说明

当 Web 表单中上传文件或提交包含二进制数据的表单,通常设为multipart/form-data类型。它允许在单个 HTTP 请求中发送多个不同类型的数据。其请求内容示例如下:

bash 复制代码
POST /upload HTTP/1.1
Host: example.com
Content-Type: multipart/form-data; boundary=---------------------------7d33a816d302b6
Content-Length: 568

-----------------------------7d33a816d302b6
Content-Disposition: form-data; name="username"

johndoe
-----------------------------7d33a816d302b6
Content-Disposition: form-data; name="email"

john@example.com
-----------------------------7d33a816d302b6
Content-Disposition: form-data; name="avatar"; filename="photo.jpg"
Content-Type: image/jpeg

[二进制数据...]
-----------------------------7d33a816d302b6--

其中 boundary 参数定义了用于分隔不同部分的边界字符串。边界字符串必须是唯一的,不能出现在任何数据部分中。
注意:

  • 每个部分以 --{boundary} 开始
  • 最后一个部分以 --{boundary}-- 结束(额外的两个短横线)
  • 每个部分的头部和内容之间有一个空行
  • 对于文件,通常包含 filename 和 Content-Type 头

出于安全考虑增加maxPartCount和maxPartHeaderSize参数限制,这两参数的设置依据:

  • maxPartCount 可以理解为限制表单字段个数,或{boundary}个数。
  • maxPartHeaderSize 则是限制 Content-Disposition: form-data; name= 中 name名的长度。
bash 复制代码
当应用代码执行request.getParameterNames()或 request.getParts()就会校验maxPartCount,maxPartHeaderSize 值

超过maxPartCount值时报错:
Caused by: com.tongweb.web.util.http.fileupload.impl.FileCountLimitExceededException: attachment
 	at com.tongweb.web.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:295)
 	at com.tongweb.server.connector.Request.parseParts(Request.java:2763)
 	... 28 more


超过maxPartHeaderSize 值时报错:
Caused by: com.tongweb.web.util.http.fileupload.impl.SizeLimitExceededException: Header section has more than 512 bytes (maybe it is not properly terminated)
 	at com.tongweb.web.util.http.fileupload.MultipartStream.readHeaders(MultipartStream.java:460)
 	at com.tongweb.web.util.http.fileupload.impl.FileItemIteratorImpl.findNextItem(FileItemIteratorImpl.java:199)
	at com.tongweb.web.util.http.fileupload.impl.FileItemIteratorImpl.<init>(FileItemIteratorImpl.java:77)
 	at com.tongweb.web.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:264)
 	at com.tongweb.web.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:286)
 	at com.tongweb.server.connector.Request.parseParts(Request.java:2763)

TongWeb7.0.4.9_M9及之后版本在server虚拟主机中设置该参数,如图:

TongWeb8.0.9.08及之后版本在通道中设置该参数,如图:

相关推荐
独泪了无痕9 小时前
探索Pinyin4j-Java中的拼音转换利器
java·后端
道尔柯南10 小时前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++
kingx311 小时前
Bugku 3122 谷歌小恐龙题解:纯离线逆向 Vault 的 AES-GCM 加密资源(附 Python 解密器)
java·逆向·ctf·bugku·aes-gcm
DevOpenClub13 小时前
职教高考控制线 API:招生类别枚举、筛选与空分数含义
java·数据库·高考
露天赏雪14 小时前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
天天被压力14 小时前
【A股分钟级高频数据完全手册 #06】北交所分钟级数据接口:京市股票Pro版最新分时
java·人工智能·python
天天被压力15 小时前
【A股分钟级高频数据完全手册 #05】指数历史分钟数据接口:Pro版沪深指数分时回放
java·人工智能·python
captain37615 小时前
▲统一功能——DispatcherServlet源码分析
java·spring·java-ee·log4j·maven
金銀銅鐵15 小时前
JDK 21 中 List.of 的实现细节:从 List12 到 ListN
java·后端·ai编程
yeccheng17 小时前
MySQL 索引超详解:从底层 B+ 树到面试高频考点
java·开发语言·jvm·mysql·面试