get请求参数数据过多导致报错

今天,我在之前的一个公司项目中遇到了一个bug,正好整理我对数据格式的知识。事实上,以前在现场发生问题时,远程也发现了同样的问题。这次我会做一个统一的总结。此错误的原因是GET请求:URL的最大长度受到浏览器和服务器的限制(通常为2KB~8KB),200可能会导致URL超过限制并触发错误。

最后,我使用post+x-www-form-urlencoded格式解决了这个问题。然后,我将谈谈我为什么在这个项目中使用这种格式。其实,最好的处理方法是性能最好的post+json。
其形式为“357253378177834646773767863168883”。的记录


image.png

image.png

首先列一下各种数据格式
用 x-www-form-urlencoded:提交简单的键值对数据(无文件),编码高效。
用 FormData:需要上传文件或传输复杂数据时,浏览器自动处理编码。
本质区别:前者是文本编码格式,后者是浏览器 API(底层依赖 multipart/form-data)。

x-www-form-urlencoded

不支持文件上传只能支持文本,格式是键值对的形式

将键值对编码为 key1=value1&key2=value2 的形式,类似于 URL 查询参数。
特殊字符(如空格、中文)会被 URL 编码(如空格 → %20)。

这种的传参格式跟get请求的参数一模一样,只不过get请求是放在路径中,这个放在了请求体中

无论是http的get请求方法还是post请求方法等,并不是说get方法用不了formdata或者json这样的数据格式来进行传参,而是HTTP 标准明确约定:GET 请求不应包含 Body。虽然某些工具(如 curl)可强行附加 Body,但主流浏览器、服务器和框架会直接忽略 GET 的 Body 数据。
服务端框架(如 Node.js 的 Express、Java 的 Spring)默认不解析 GET 的 Body

form-data

支持上传文件,且转换为二进制。

POST /upload HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123

----WebKitFormBoundaryABC123
Content-Disposition: form-data; name="username"

John
----WebKitFormBoundaryABC123
Content-Disposition: form-data; name="avatar"; filename="photo.jpg"
Content-Type: image/jpeg

<文件的二进制数据>
----WebKitFormBoundaryABC123

application/json

JSON 数据以键值对(Key-Value)的形式组织,更适合结构化的数据

{
  "name": "Alice",
  "age": 30,
  "is_student": false,
  "skills": ["JavaScript", "Python"],
  "address": {
    "city": "Beijing",
    "country": "China"
  }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容