





























你提到的三种 Content-Type 对应不同的前端数据结构与构造方式,以下是详细说明和示例:
multipart/form-data适用场景:上传图片、视频、附件等二进制文件
前端核心:使用 FormData对象自动处理边界和编码
// 假设有一个 <input type="file" id="fileInput">
const file = document.getElementById('fileInput').files[0];
const formData = new FormData();
无需手动设置 Content-Type,浏览器会自动生成带 boundary的头部
支持混合数据类型(文件 + 普通字段)
后端通常用 multer(Node.js)、MultipartResolver(Spring)等解析
application/x-www-form-urlencoded适用场景:传统 HTML 表单提交、简单键值对数据
前端核心:键值对 URL 编码(key=value&key2=value2)
URLSearchParams(推荐)const params = new URLSearchParams();
params.append('username', '张三');
params.append('age', '25');
params.append('hobby', '篮球');
const data = 'username=张三&age=25&hobby=' + encodeURIComponent('篮球');
fetch('/api/login', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: data,
});
不支持嵌套对象(如 { user: { name: '张三' } })
特殊字符需编码(encodeURIComponent)
数据量有限制(URL 长度限制)
application/json适用场景:RESTful API、复杂数据结构、SPA 应用
前端核心:JSON 序列化
const product = {
id: 'P001',
name: '智能手机',
specs: {
color: '黑色',
storage: '256GB',
},
tags: ['数码', '5G'],
};
fetch('/api/products', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer token123',
支持任意复杂嵌套结构
前后端数据格式统一(JavaScript 对象 ↔ JSON)
便于接口文档定义(OpenAPI/Swagger)
|
场景 |
Content-Type |
前端数据结构 |
是否支持文件 |
复杂度 |
|---|---|---|---|---|
|
文件上传 |
|
|
✅ 支持 |
中 |
|
纯表单 |
|
键值对字符串 |
❌ 不支持 |
低 |
|
API 接口 |
|
JavaScript 对象 |
❌ 不直接支持 |
高 |
文件上传:始终用 FormData,不要尝试用 JSON 传文件(Base64 除外,但效率低)
表单提交:简单表单用 x-www-form-urlencoded,复杂表单可考虑 JSON
API 设计:优先使用 JSON,保持前后端一致
注意跨域:application/json会触发 CORS 预检请求(OPTIONS)
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。