前端基础知识之---Content-Type有哪些格式

Content-Type 是 HTTP 头,告诉服务器请求或响应的数据格式

一、常见 Content-Type 一览

Content-Type 说明 请求体格式示例
application/json JSON 格式(最常用) {"name":"张三","age":25}
application/x-www-form-urlencoded 表单格式(URL 编码) name=张三&age=25
multipart/form-data 文件上传格式 包含 boundary 分隔符的混合数据
text/plain 纯文本 hello world
text/html HTML 格式 <div>hello</div>
application/xml XML 格式 <user><name>张三</name></user>
application/javascript JS 文件 console.log('hello')
image/png / image/jpeg 图片格式 二进制数据

二、详细说明

1、 application/json(前后端分离最常用)

在封装axios时默认设置成application/json

javascript 复制代码
const request = (option: any) => {
  const { headersType, headers, ...otherOption } = option
  return service({
    ...otherOption,
    headers: {
      'Content-Type': headersType || default_headers,
      language: locale.lang || 'zh-CN',
      ...headers
    }
  })
}
default_headers: 'application/json'

//举例
fetch('/api/user', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ name: '张三', age: 25 })
})

2、application/x-www-form-urlencoded(传统表单)

javascript 复制代码
return request.post({
    url: '/system/oauth2/authorize',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    params: {
      response_type: responseType,
      client_id: clientId,
      redirect_uri: redirectUri,
      state: state,
      auto_approve: autoApprove,
      scope: JSON.stringify(scopes)
    }
  })

//举例
// 方式1:手动拼接
fetch('/api/login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body: 'username=admin&password=123456'
})

// 方式2:使用 URLSearchParams
const params = new URLSearchParams()
params.append('username', 'admin')
params.append('password', '123456')

fetch('/api/login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body: params  // axios 会自动设置 Content-Type
})

3、multipart/form-data(文件上传)

javascript 复制代码
upload: async <T = any>(option: any) => {
    option.headersType = 'multipart/form-data'
    const res = await request({ method: 'POST', ...option })
    return res as unknown as Promise<T>
}

//举例
const formData = new FormData()
formData.append('file', fileInput.files[0])
formData.append('name', '头像')

fetch('/api/upload', {
  method: 'POST',
  body: formData  // ⚠️ 不要手动设置 Content-Type,浏览器会自动加 boundary
})

4、text/plain(纯文本)

javascript 复制代码
fetch('/api/log', {
  method: 'POST',
  headers: { 'Content-Type': 'text/plain' },
  body: '这是一条日志信息'
})

三、面试常问:JSON 和 Form 格式的区别

对比项 JSON URL-encoded
数据格式 {"name":"张三"} name=张三
支持嵌套对象 ✅ 支持 ❌ 不支持
支持数组 ✅ 支持 ⚠️ 需要特殊处理 name[]=1&name[]=2
可读性
传输效率 略大 略小
相关推荐
萧行之7 小时前
可视化技术复盘:从图形语法看 D3、Vega-Lite、ECharts、Observable Plot
前端·学习·数据可视化
尾善爱看海15 小时前
Vue 面试收官篇:SSR、性能优化落地、30 道高频面试题精讲(附标准答案)
前端·javascript·vue.js·面试·vue
驳是16 小时前
一个组件,提升 react-router 开发的幸福感
前端·preact
GreenTea16 小时前
OpenAI Agents API 上手实测:一次调用把整个 agent loop 甩给 OpenAI
前端·后端·算法
星云API技术支持16 小时前
企业微信二次开发:群权限设置、成员管理与群资料维护的接口组合实践
java·前端·企业微信
京东云开发者16 小时前
81.8 秒的视频,我们改了 15 个版本:一次纯 Codex 驱动的 AI-native 视频实践
前端·aigc
Csvn17 小时前
TypeScript 大型项目架构:从单体 tsconfig 到分层可扩展的工程
前端
计算机魔术师18 小时前
Dario Amodei 发文呼吁为前沿 AI 降速并提出三点计划
前端
计算机魔术师19 小时前
OpenAI的AI代理偷偷给RubyGems下毒,我们却毫无察觉
前端
甲维斯19 小时前
0代码,0建模,3句话开发一个3D游戏!
前端·游戏·游戏开发