本文目录
什么是 MIME 类型?
MIME 类型(多用途互联网邮件扩展类型,Multipurpose Internet Mail Extensions type),也称为媒体类型,是一种用于标识文件或数据流性质与格式的标准标签。它最初为电子邮件附件而设计,如今已成为 Web 浏览器、服务器和 API 之间就内容格式进行沟通的基础。
每个 HTTP 响应都包含一个带有 MIME 类型的 Content-Type 头,用于告知浏览器如何处理数据——是将其渲染为 HTML、显示为图片、播放为音频、作为文件下载,还是解析为 JSON。
MIME 类型的结构
一个 MIME 类型由主类型、子类型以及可选参数组成,遵循以下格式:type/subtype;parameter=value。
- 主类型(Type)——总体类别:text、image、audio、video、application、multipart、font 或 model
- 子类型(Subtype)——主类型内部的具体格式:html、png、mp4、json、pdf、octet-stream
- 参数(Parameters)——可选的键值对:文本类型使用 charset=utf-8,multipart 类型使用 boundary
免费试用 —— 无需注册
查询 MIME 类型 →常见的 MIME 类型
IANA(互联网数字分配机构)注册了数百种 MIME 类型。以下是最常用的几种。
- text/html——HTML 文档,每个网页的基础
- application/json——JSON 数据,REST API 通信的标准格式
- image/png 和 image/jpeg——Web 上最常见的两种图片格式
- application/pdf——PDF 文档,通用的可打印文档格式
- application/octet-stream——通用二进制数据,在具体类型未知或用于文件下载时使用
MIME 类型查询的工作原理
MIME 类型查询会将文件扩展名映射到相应的 MIME 类型,反之亦然。
- 扩展名到 MIME——给定像 .png 这样的文件扩展名,查询会返回 image/png
- MIME 到扩展名——给定像 application/pdf 这样的 MIME 类型,查询会返回 .pdf
- 内容检测——当扩展名缺失或具有误导性时,某些工具会利用魔数(文件头字节)来检测实际的内容类型
Web 开发中的 MIME 类型
正确的 MIME 类型对于 Web 的安全性、性能和功能至关重要。
- Content-Type 头——服务器必须为每个响应发送正确的 MIME 类型。将 JavaScript 作为 text/html 提供可能会造成 XSS 漏洞
- X-Content-Type-Options: nosniff——这个安全响应头可阻止浏览器擅自猜测 MIME 类型,强制使用服务器声明的类型
- Accept 头——客户端通过发送 Accept 头告知服务器自己能处理哪些内容类型,从而实现内容协商
常见问题
MIME 类型和 Content-Type 有什么区别?
Content-Type 是一个包含 MIME 类型值的 HTTP 头。MIME 类型是格式标识符(例如 application/json),而 Content-Type 是在 HTTP 通信中承载该值的响应头名称。
我可以自定义 MIME 类型吗?
可以,方式是使用带 vnd. 前缀的厂商专用子类型(例如 application/vnd.mycompany.myformat),或使用带 prs. 前缀的个人子类型。实验性类型使用 x- 前缀,不过这一惯例正在逐步被淘汰。
为什么我的服务器会为已知的文件类型返回 application/octet-stream?
这是因为服务器的 MIME 类型配置中没有为该文件扩展名建立映射。请在你的 Web 服务器配置中(nginx.conf、.htaccess 或 Express 中间件)添加正确的映射。