今天,我在之前的一个公司项目中遇到了一个bug,正好整理我对数据格式的知识。事实上,以前在现场发生问题时,远程也发现了同样的问题。这次我会做一个统一的总结。此错误的原因是GET请求:URL的最大长度受到浏览器和服务器的限制(通常为2KB~8KB),200可能会导致URL超过限制并触发错误。
最后,我使用post+x-www-form-urlencoded格式解决了这个问题。然后,我将谈谈我为什么在这个项目中使用这种格式。其实,最好的处理方法是性能最好的post+json。
其形式为“357253378177834646773767863168883”。的记录


首先列一下各种数据格式
用 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"
}
}