HTTP 的 Content-Type 及其媒体类型(MIME)
2024-09-02 08:17:07
Content-Type
Content-Type 代表 HTTP 携带的文件类型,决定文件接收方或发送方将以什么形式、什么编码读取这个文件。下图,load.gif 的媒体类型就是 image/gif:
媒体类型
MIMEIETF RFC 6838 (Multipurpose Internet Mail Extensions)是一种标准,用来表示文档、文件或字节流的性质和格式。
客户端向 Web 服务器请求大量的资源,包括图片、音频、视频、CSS、JavaScript。给 Content-Type 添加 MIME,浏览器以正确的方式处理文件。如果配置不正确,浏览器可能会曲解文件内容,网页将无法正常工作,并且下载的文件也会被错误处理。
媒体类型结构
MIME 的组成结构非常简单,由类型与子类型两个字符串中间用 "/" 分隔而组成。"type" 表示可以被分多个子类的独立类别;"subtype" 表示细分后的每个类型。
type/subtype
独立媒体类型
有 TEXT(文本)、IMAGE(图像)、AUDIO(音频)、VIDEO(视频)、APPLICATION(应用程序)这五种独立媒体类型。
独立媒体类型 | 主类型 | RFC 定义 | 子类型 |
---|---|---|---|
TEXT | 表明是某种文本文件 | RFC 6838 - 4.2.1 | text/plain, text/html, text/css |
IMAGE | 表明是某种图像文件 | RFC 6838 - 4.2.2 | image/gif, image/png |
AUDIO | 表明是某种音频文件 | RFC 6838 - 4.2.3 | audio/midi, audio/mpeg |
VIDEO | 表明是某种视频文件 | RFC 6838 - 4.2.4 | video/webm, video/ogg |
APPLICATION | RFC 6838 - 4.2.5 | application/javascript |
复合媒体类型
上面五个独立媒体类型要求内容只能其中一种独立媒体类型,不可以包含多独立媒体类型;而 MULTIPARTRFC 6838 - 4.2.6可以让内容包含多种独立媒体类型,所以它是符合媒体类型。
MULTIPART 的子类型通常是 "form-data",也就是 "multipart/form-data"。它通常用来上传文件时所使用的一种 MIME 类型。把文件发送给 Web 服务器:
// 构造 FormData
let formData = new FormData();
// 1. 添加多个文件
for (let index in this.files) {
formData.append('files', this.files[index]);
}
// 2. 添加两个文本
formData.append('name', this.user.name);
formData.append('sex', this.user.sex);
// 3. 发送请求
axios.post('http://localhost:8080/upload', formData, {
// 配置 MIME
headers: {
'content-type': 'multipart/form-data'
}
});
@RequestMapping(value = "/upload", consumes = "multipart/form-data")
public void upload(@RequestParam("name") String name, @RequestParam("sex") String sex, @RequestParam("files") MultipartFile[] files) {
System.out.println("{ sex: " + name + ", sex: " + sex + " }");
for (MultipartFile file : files) {
System.out.println(file.getOriginalFilename());
}
}
复合媒体类型包含多种媒体类型,这个请求中包含 TEXT 和 IMAGE 媒体类型。
最新文章
- vs2010 创建预编译头 Debug 正常 Release Link Error问题解决
- 关于js中的几个小问题。
- HDU 1114 Piggy-Bank (poj1384)
- 用Delphi实现文件关联
- bash下几个替换运算符的区分
- asp.net core后台系统登录的快速构建
- Linux 高性能服务器编程——Linux网络编程基础API
- Hadoop2.41的HA的配置与启动
- Python爬虫入门教程 55-100 python爬虫高级技术之验证码篇
- Linux-CentOS 重置root密码
- 自己动手实现java数据结构(一) 向量
- pair work结对编程(张艺 杨伊)
- osg内置shader变量
- error.jsp错误页面跳转,统一异常处理
- 建立对ActiveX控件的了解
- Shiro配置cookie以及共享Session和Session失效问题
- ejabberd学习2
- 【bzoj3732】Network 最小生成树+倍增LCA
- 移动Web开发规范概述
- mybatis配置mapperLocations多个路径
热门文章
- 腾讯云Redis全面升级,性能提升400%,可用性高达5个9
- 从零开始实现lmax-Disruptor队列(二)多消费者、消费者组间消费依赖原理解析
- python实现对简单的运算型验证码的识别【不使用OpenCV】
- iPhone x 的区别
- .NET6 开源之JSON 2 SQL (JORM框架)
- Spring Data JPA系列3:JPA项目中核心场景与进阶用法介绍
- 好用到爆!GitHub 星标 32.5k+的命令行软件管理神器,功能真心强大!
- expect自动应答
- 7 个有趣的 Python 实战项目,超级适合练手
- Tomcat 安装及配置,创建动态的web工程