首页/网络/协议速查/Content-Type 内容类型
HTTP 头与缓存70 条

Content-Type 内容类型

描述消息体(请求的实体或响应的表示)的媒体类型与参数:JSON、表单、multipart、字符集与 boundary 都靠它。

协议速查网络更新于 2026-10-13

Content-Type 是什么

Content-Type 描述消息体的媒体类型与编码参数:请求里它说明提交的数据是什么格式,响应里它告诉客户端该如何解析。JSON、表单、多部分混合提交、字符集与分隔符,全靠这个头区分。它是内容协商的关键一环:服务端要按它选择解析器,客户端要按它选择解码方式,任何一端写错都会直接导致解析失败或数据错乱。

基本信息

名称Content-Type(RFC 9110 §8.3,媒体类型注册见 IANA)
作用标注消息体的媒体类型与编码参数
关键参数字符集用于文本,分隔符用于混合提交,范围类型用于分段响应
写在哪请求体存在时写在请求头,响应有内容时写在响应头
与嗅探关系缺失时部分实现会猜测,配合禁止嗅探头可避免安全风险

典型使用场景

  • 接口调用:声明结构化数据并以字符集指明编码,避免中文乱码
  • 页面表单:使用表单编码提交键值对,简单场景最省事
  • 文件上传:使用多部分混合提交,分隔符由客户端生成并写入头部
  • 静态资源响应:让浏览器按类型选择渲染或下载行为
  • 分段下载:配合范围请求返回部分内容,同时说明返回的是哪一段

三种常见请求体类型

三种常见请求体类型
结构化数据; 字符集声明为 utf-8   # 接口最常用,注意必须显式声明否则可能被按表单解析
表单编码; 键值对用等号与连接符拼接   # 传统页面表单,不支持嵌套结构
多部分混合; 头部带分隔符参数   # 文件上传,分隔符必须与报文正文中的一致

常见媒体类型速查

类型用途注意
结构化数据接口请求与响应必须显式声明,否则可能被按表单解析
表单编码传统页面表单不支持嵌套结构,复杂值需自行序列化
多部分混合含文件上传的提交分隔符与正文不一致会直接解析失败
纯文本日志上报、简单输出默认字符集可能有歧义,建议写明
二进制流文件下载建议配合内容处置头指定文件名

排查要点

  • 先确认请求头里到底声明了什么,用能打印完整请求的命令行工具看一眼最直观
  • 对比响应体实际格式与声明是否一致,声明与内容不符会让客户端解析出错
  • 文本类内容建议统一声明字符集,跨系统传递时乱码问题大多来源于此
  • 上传失败优先怀疑分隔符:手工拼接请求体时最容易与实际正文不一致
内容缺失类型时,部分实现会按默认类型猜测或做内容嗅探。安全上应同时下发禁止嗅探的响应头,避免浏览器把上传的文件当成脚本执行。
用文本类型发送结构化数据会被严格的接口直接拒绝,表面看是请求失败,实际只是头部声明错误;反过来把二进制当文本声明,接收方拿到的数据会被破坏。

四个实践要点

  • 客户端与服务端要约定统一的类型,跨团队接口应在文档里明确写出来
  • 响应体含非英文字符时统一声明字符集,避免下游按默认编码解析出乱码
  • 上传接口要同时校验声明类型与实际内容,只信声明会被伪装文件绕过
  • 内网调用同样要写清类型,省略头部在跨语言实现中最容易出问题

易错点

  • 手工拼接多部分请求体时分隔符与头部声明不一致,服务端解析失败却难以从报错看出原因
  • 结构化数据用文本类型发送,接口直接拒绝,排查时误以为是参数问题
  • 响应声明的类型与实际内容不符,客户端解析异常或把内容当成下载
  • 文本类内容不声明字符集,跨系统传递后出现乱码,尤其在非英文字符场景

数据来源与参考

  • RFC 9110 §8.3 Content-Type
  • RFC 2046(multipart)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌