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

作为后端开发者,每天都要处理各种客户端请求。其中 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 更轻量,都可以,看你们则呢么选择或者约定。
相关推荐
Methy3 分钟前
IoTHub半个月崩了五次?都是裸rethrow惹的祸
服务器·c++·后端
我不会起名字32213 分钟前
一天一道力扣Hot100(36):深度优先算法---组合总和
数据结构·c++·后端·python·算法·go
回家路上绕了弯23 分钟前
AI 编程助手为什么反复读取同一份上下文?如何减少无效重复
后端
Lost of 程序猿26 分钟前
用 Quartz.NET 优雅地处理 .NET 定时任务:从选型到 Docker 部署全记录
后端·c#·asp.net
名字还没想好☜43 分钟前
Spring Boot 优雅停机实战:等在途请求处理完再退出,配合 K8s preStop 别丢请求
java·后端·spring
摇滚侠1 小时前
《Spring Boot 3:高级与架构设计》第 1 章 Bean 与 BeanDefinition 个人理解 2
java·spring boot·笔记·后端
IT_陈寒1 小时前
Redis主从切换竟让业务卡了3秒?这个坑我替你踩了
前端·人工智能·后端
右耳朵猫AI1 小时前
Java周刊2026W38 | Micronaut 修补三漏洞、JDK 27 提速 54%、Jetty 修复抖动测试
java·后端·spring
步行cgn2 小时前
BeanFactory 与 FactoryBean 的区别:面试深度解析
java·后端·spring
mldong2 小时前
一套审批流要写多少代码:13 个框架的接入 diff 我数了一遍,最少 422 行,最多 1798 行
后端·架构