实体首部字段Content-Type小结

Content-Type 是区分互联网数据类型的MIME标签,用于HTTP请求和响应中。本文介绍了Content-Type的格式,如`type/subtype;parameter`,并列举了常见的值,如`application/json`、`application/x-www-form-urlencoded`、`multipart/form-data`和`text/xml`。在前端请求和后端响应中,正确设置Content-Type至关重要,尤其在文件上传、JSON解析和导出文件等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Content-Type 简介

Content-Type 又称 MIME 类型,在互联网中有成百上千中不同的数据类型,HTTP 在传输数据对象时会为他们打上称为 MIME 的数据格式标签,用于区分数据类型。最初 MIME 是用于电子邮件系统的,后来 HTTP 也采用了这一方案。

我们用 Chrome 的开发者模式以访问百度为例,简单看看 Response 的几种 Content-Type 类型。

如下所示

html 文档在这里插入图片描述
样式文件,CSS
在这里插入图片描述
图像文件,png格式
在这里插入图片描述

Content-Type 格式

Content-Type:type/subtype ;parameter

参数解释:

  • type主类型,任意的字符串,如 text,如果是 * 号代表所有。
  • subtype子类型,任意的字符串,如 html,如果是 * 号代表所有,用 “ / ” 与主类型隔开。
  • parameter可选参数,如 charset,boundary 等。

两个例子:

  • Content-Type : text/html
  • Content-Type : application/json;charset:utf-8

 

几个常见的 Content-Type 值

1. 以 application 开头的这两种媒体格式类型:

  • application/json:参数主体是序列化后的 JSON 字符串,会被直接放到请求实体里,不进行任何处理。
  • application/x-www-form-urlencoded:http 会将请求参数用 key1=val1&key2=val2 的方式进行组织,并放到请求实体里面,这是标准的编码格式。当表单的 action 为 get 时候,客户端把 form 数据转换成一个字串 append 到 url 后面,用 ‘?’ 分割。当 action 为 post 时候,浏览器把 form 数据封装到 http body 中,然后发送到 server.

2. 上传文件时常用的 multipart/form-data:

multipart/form-data 支持文件上传的格式,一般需要上传文件的表单使用该类型。

3. 以 xml 格式编码数据体,早期广泛使用的格式 text/xml:

与 application/json 类似,这里用的是 xml 格式的数据,text/xml 的话,将忽略 xml 数据里的编码格式。

 
完整的 Content-Type 取值对照表链接: HTTP Content-type 常用对照表

 

关于 Request 和 Response 的 Content-Type

1. 请求 Request 的 Content-Type:

前端开发需要注意请求时的 Content-Type 设置,特别是使用 ajax 的时候,如果设置得不准确,很有可能导致请求失败。比如在 Spring 中,如果接口使用了 @RequestBody,Spring 强大的自动解析功能,会将请求实体的内容自动转换为 Bean,但前提是请求的 Content-Type 必须设置为 application/json,否正就会返回 415 错误(415 错误是 Unsupported media type,即不支持的媒体类型)。

2. 响应 Response 的 Content-Type:

服务端响应(Response)的 Content-Type 最好也保持准确,虽然一般 Web 开发中,前端解析响应的数据不会根据 Content-Type,并且服务端一般能自动设置准确的 Content-Type。

但是有一种特殊情况,这种情况其实也比较常见,那就是导出、下载文件。此时我们需要手动设置 Content-Type 的值。

比如下面这个导出 excel 文件的代码(Content-Disposition 是 Content-Type 的扩展,告诉浏览器弹窗下载框,而不是直接在浏览器里展示文件。因为一般浏览器对于它能够处理的文件类型,如 txt,pdf 等,它都是直接打开展示,而不是弹窗下载框)。

response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
response.flushBuffer();
workbook.write(response.getOutputStream());

所以,一般情况下,虽然后端码农不需要显式的设置 Content-Type 的值,但遇到例如导出文件这种特殊情况还是需要注意下。

参考链接: Content-Type 详解

### HTTP `Content-Type` MIME 类型列表及其在网络开发中的应用 在HTTP请求和响应消息中,`Content-Type`头部字段用于指示实体主体的媒体类型。这有助于客户端理解如何解析返回的数据[^1]。 #### 常见MIME类型分类 - **文本类** - `text/html`: HTML格式文档 - `text/plain`: 纯文本文件 - `text/css`: CSS样式表 - **图像类** - `image/jpeg`: JPEG图片 - `image/png`: PNG图片 - `image/gif`: GIF动画图 - **应用程序数据** - `application/json`: JSON结构化数据 - `application/xml`, `application/xhtml+xml`: XML或XHTML文档 - `application/pdf`: PDF文档 - `application/javascript`: JavaScript脚本代码 - **多媒体资源** - `audio/mpeg`: MP3音频流 - `multipart/form-data`: 文件上传或多部分表单输入 - `application/x-www-form-urlencoded`: URL编码后的键值对形式,默认POST方式下的表单提交格式 当服务器向浏览器发送内容时会指定相应的`Content-Type`头来告知浏览器应该采用哪种渲染机制处理接收到的信息;同样地,在发起AJAX请求或其他类型的API调用过程中也需要设置合适的`Content-Type`以便于服务端能够正确解读传入参数并作出回应。 ```http GET /example.html HTTP/1.1 Host: www.example.com Accept: text/html,application/xhtml+xml,*/*;q=0.9 ``` 上述例子展示了浏览器发出的一个简单的HTTP GET请求,并通过`Accept`首部声明自己可以接受哪些类型的MIME类型作为回复的内容格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值