后端的请求体你选对了吗?

作为后端开发者,每天都要处理各种客户端请求。其中 rawform-data 这两种请求体的提交方式,看似简单却常常让人纠结。因为选择的类型不同,前端的封装值的方式就不同,那么它们到底有什么不同呢?

今儿个就好好的分析分析!!!


一、本质区别

  • FormData (表单数据): 就像传统的 HTML 表单提交。数据被编码成键值对 (key=value),并且用特定的分隔符(boundary)隔开。它最大的超能力是能高效上传文件。当你在网页上选了个文件点击上传时,多半就是它在幕后工作。

    • Content-Type: multipart/form-data; boundary=... (那个 boundary 是系统自动生成的一串随机字符,用来分隔不同字段)

    • 数据样子:

      css 复制代码
      张三
      --boundary123
      Content-Disposition: form-data; name="avatar"; filename="logo.png"
      Content-Type: image/png
      
      [这里是logo.png文件的二进制数据]
      --boundary123--
  • Raw (原始数据): 你可以把它想象成直接"塞"一段任意格式的原始数据到请求体里,没有预定义的键值结构。最常用的是 JSON (application/json),也可以是纯文本 (text/plain)、XML (application/xml) 甚至是一段自定义格式。

    • Content-Type: 明确指定你塞进去的是什么,比如 application/json, text/xml

    • 数据样子 (JSON):

      json 复制代码
      {
          "username": "张三",
          "age": 30,
          "hobbies": ["coding", "reading"]
      }

二、什么时候该用谁?

  1. 请用 FormData:

    • 上传文件/图片: 这是它的主场!无论是单文件还是多文件,配合 <input type="file">FormData API 轻松搞定。
    • 传统表单提交: 需要兼容老系统或者就是简单的键值对提交(且可能包含文件)时。
  2. 请用 Raw (通常是 JSON):

    • API 交互 (RESTful API): 现代 Web API 和移动端 API 通信的绝对主力。结构清晰、灵活表达复杂嵌套数据。
    • 提交结构化数据: 当你需要传递一个对象、数组等复杂数据结构时,JSON 的层次化表示比扁平的键值对强大得多。
    • 需要明确数据类型: JSON 天生区分字符串、数字、布尔值、数组、对象、null,后端解析更精准。

三、总结

特性 FormData (multipart/form-data) Raw (常用 application/json)
主要用途 文件上传、传统表单提交 API 交互 、传递结构化数据
数据格式 键值对 + 分隔符 (含文件二进制) 原始文本 (常用 JSON, XML, 纯文本等)
Content-Type multipart/form-data application/json, text/plain
数据结构灵活性 扁平 (键值对),处理复杂结构较麻烦 (JSON 天然支持对象、数组嵌套)
数据大小效率 有 boundary 开销,传大文件效率高 纯文本数据更紧凑,文件处理复杂

简单口诀:

  • 要传文件? 无脑选 FormData (multipart/form-data)。
  • 做 API (尤其是复杂数据)? 首选 Raw JSON (application/json)。
  • 普通表单没文件? FormData (application/x-www-form-urlencoded 更轻量,都可以,看你们则呢么选择或者约定。
相关推荐
bobz96520 分钟前
GPT-4.1 对比 GPT-4o
后端
Java小白程序员37 分钟前
Spring Framework :IoC 容器的原理与实践
java·后端·spring
小小愿望1 小时前
前端无法获取响应头(如 Content-Disposition)的原因与解决方案
前端·后端
追逐时光者2 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 50 期(2025年8.11-8.17)
后端·.net
杨DaB2 小时前
【SpringBoot】Swagger 接口工具
java·spring boot·后端·restful·swagger
why技术2 小时前
也是震惊到我了!家里有密码锁的注意了,这真不是 BUG,是 feature。
后端·面试
桦说编程3 小时前
方法一定要有返回值 \ o /
java·后端·函数式编程
David爱编程3 小时前
Java 创建线程的4种姿势,哪种才是企业级项目的最佳实践?
java·后端
Java微观世界4 小时前
Object核心类深度剖析
java·后端
MrSYJ4 小时前
为什么HttpSecurity会初始化创建两次
java·后端·程序员