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

作为后端开发者,每天都要处理各种客户端请求。其中 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 更轻量,都可以,看你们则呢么选择或者约定。
相关推荐
IT_陈寒13 小时前
Python性能优化:5个被低估但效果惊人的内置函数实战解析
前端·人工智能·后端
千码君201613 小时前
Go语言:对其语法的一些见解
开发语言·后端·golang
yuuki23323313 小时前
【C语言】预处理详解
c语言·windows·后端
合作小小程序员小小店13 小时前
web网页开发,在线%考试,教资,题库%系统demo,基于vue,html,css,python,flask,随机分配,多角色,前后端分离,mysql数据库
前端·vue.js·后端·前端框架·flask
顾漂亮13 小时前
Redis深度探索
java·redis·后端·spring·缓存
努力也学不会java13 小时前
【Spring】Spring事务和事务传播机制
java·开发语言·人工智能·spring boot·后端·spring
小姐姐味道14 小时前
Claude Skills:被过度吹嘘的的概念翻新!
后端·github·claude
新青年57914 小时前
Go语言项目打包上线流程
开发语言·后端·golang
陈随易14 小时前
PaddleOCR-VL可太强了,图片识别转文字的巅峰之作
前端·后端·程序员