报文大小限制、请求体类型总结

2024-01-07 22:47:18

  • 报文分为请求报文、响应报文
  • 响应报文一般无限制(比如一个几十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图片)等。

文章来源:https://blog.csdn.net/weixin_43024834/article/details/135444235
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。