文章目录
- 1. 各节点请求体有无限制
- 1.1 http协议
- 1.2 TCP/IP层限制
- 1.3 浏览器
- 1.4 nginx
- 1.5 gateway
- 1.6 tomcat
- 1.7 springboot
- 1.8 内存、磁盘处理不了一切白搭
- 2. 请求体类型
- 2.1 application/x-www-form-urlencoded
- 2.2 multipart/form-data
- 2.3 application/json
- 2.4 text/plain
- 2.5 application/xml 或 text/xml
- 2.6 application/octet-stream
- 2.7 其他自定义或特定格式
- 报文分为请求报文、响应报文
- 响应报文一般无限制(比如一个几十MB的excel照样可以下载下来)
- 请求报文有限制
1. 各节点请求体有无限制
1.1 http协议
请求体、响应体无限制
1.2 TCP/IP层限制
虽然HTTP不限制报文长度,但底层的TCP协议实际上有其最大报文段长度(Maximum Segment Size, MSS),这会影响单个TCP包能传输的数据量。不过对于HTTP来说,大文件会被分割成多个TCP包传输。
1.3 浏览器
- get请求url长度没有明确限制,但最好不要超过2048个字符
- post请求:Chrome浏览器对HTTP请求体的大小没有严格的硬性限制。在实际应用中,Chrome可以处理几MB到几十MB甚至更大的POST请求体
1.4 nginx
Nginx默认的请求体大小限制是1MB。这意味着,如果客户端发送到Nginx服务器的HTTP请求体(例如POST请求中的数据)超过了1MB,Nginx将会拒绝该请求,并返回一个413 Request Entity Too Large错误。
在Nginx的配置文件中,可以通过修改client_max_body_size指令来调整这个限制:
http {
client_max_body_size 1m; # 默认值为1MB
}
若要增大请求体大小限制,可以将其设置为更大的数值,如允许上传50MB的文件:
http {
client_max_body_size 50m; # 设置为50MB
}
请注意,更改配置后通常需要重新加载或重启Nginx服务以使新配置生效。
1.5 gateway
未限制
1.6 tomcat
请求体大小默认2MB
例如,在server.xml中添加或修改如下配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxPostSize="20971520" /> <!-- 设置为20MB,可根据需要自定义 -->
若要取消POST请求大小的限制,可将 maxPostSize 属性值设为 -1,表示不限制POST数据的大
1.7 springboot
- Spring Boot 默认情况下并没有明确指定HTTP请求体的最大大小限制,这个限制主要取决于内嵌的Web服务器容器。对于大多数场景(默认使用Tomcat作为Web服务器),POST请求体大小的限制通常设置为2MB
- 默认文件大小是1MB
可以重新设置:
spring:
servlet:
multipart:
enabled: true #是否启用http上传处理
max-request-size: 100MB #最大请求体的大小
max-file-size: 20MB #设置单个文件最大长度
file-size-threshold: 20MB #当文件达到多少时进行磁盘写入
1.8 内存、磁盘处理不了一切白搭
2. 请求体类型
HTTP请求体(Request Body)的类型取决于请求方法和发送的数据内容,常见的请求体类型包括:
在发送HTTP请求时,可以通过设置Content-Type头部来指定请求体的类型
2.1 application/x-www-form-urlencoded
这是最常见的一种编码方式,适用于表单提交数据。键值对通过&分隔,每个键值对内部通过等号(=)进行连接。
示例:
key1=value1&key2=value2
2.2 multipart/form-data
- 通常用于文件上传和其他需要同时包含文本和二进制数据的场景。这种格式会将表单数据分割成多个部分(parts),每个部分可以有自己的Content-Type、名称和文件名。
- 比如文件导入,然后key部分选择File类型,在value部分选择要导入的文件
2.3 application/json
JSON(JavaScript Object Notation)是现代Web服务中常用的请求体格式,适合传输结构化数据,便于客户端和服务器端进行处理。
示例:
{
"key1": "value1",
"key2": "value2"
}
2.4 text/plain
纯文本格式,适用于简单的文本信息传递。
2.5 application/xml 或 text/xml
- XML格式,早期Web服务中广泛使用的数据交换格式。
- 比如ESB报文就是xml形式,且esb报文xml标签新加需要治理,esb有白名单校验
2.6 application/octet-stream
-
二进制流数据,常用于文件或其他非结构化的二进制数据传输。
-
application/octet-stream 是一个通用的MIME类型(Multipurpose Internet Mail Extensions),它代表任意类型的二进制数据流。在HTTP协议中,当发送或接收的数据无法明确指定为某种特定格式时,可以使用此类型作为请求体或响应体的内容类型。
-
例如,在文件上传和下载场景中,如果服务器返回的是一个未知或非特定类型的二进制文件,或者客户端向服务器发送的是一个不明确具体格式的二进制数据块,则可以将Content-Type设置为 application/octet-stream。
-
这种类型表明了传输的数据是一个原始的、未解释的字节序列,需要由接收端根据上下文或其他信息来决定如何处理这些数据。浏览器通常会提示用户保存这样的内容到磁盘上,而不是尝试在页面上展示或执行它。
2.7 其他自定义或特定格式
根据具体应用场景和服务约定,可能还有其他类型的请求体格式,如application/pdf(PDF文档)、image/jpeg(JPEG图片)等。