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

作为后端开发者,每天都要处理各种客户端请求。其中 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 更轻量,都可以,看你们则呢么选择或者约定。
相关推荐
红尘散仙5 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记6 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆7 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪7 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball6168 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_2518364578 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao8 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒9 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
ayqy贾杰10 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理
Apifox10 小时前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全