MIME类型速查表

扩展名 MIME 类型 说明 分类
MIME类型速查表:收录 453 条常见文件扩展名与 MIME 类型(Content-Type)的对应关系,覆盖图片、音视频、字体、文档、压缩包、代码等 10 大分类,支持关键词搜索、分类筛选与一键复制,附 MIME 原理与服务器配置科普。

一、工具说明

MIME 类型速查表收录了 453 条常见文件扩展名与 MIME 类型的对应关系,覆盖图片、音频、视频、字体、文档、压缩包、网页、代码、数据、其他共 10 个分类,支持关键词搜索与分类筛选,点一下 MIME 类型即可复制。

怎么用

  1. 搜索:在顶部输入框输入扩展名(如 jpg)、MIME 类型(如 image/png)或中文说明(如 视频),表格会实时过滤。支持用空格分隔多个关键词,例如 image 无损 表示两个条件同时满足。
  2. 筛选分类:点击「全部 / 图片 / 音频 …」等标签,只查看某一类。搜索与分类可以叠加使用。
  3. 复制:点击表格中蓝色的 MIME 类型文字,即可一键复制到剪贴板。
  4. 清空:点输入框右侧的 ✕,或按 Esc 键,快速恢复全部记录。

表格区高度固定 400px,内容超出时在区域内滚动,表头会吸顶固定,方便边滚边看。


二、什么是 MIME 类型

MIME* 是 *Multipurpose Internet Mail Extensions*(多用途互联网邮件扩展)的缩写。它最早诞生于 1990 年代,为了解决一个很具体的问题:*电子邮件最初只能传输纯 ASCII 文本,没法发送图片、音频、Word 文档这些二进制内容。

MIME 的解法是给每一段数据贴上「标签」,说明它到底是什么东西,这个标签就是 MIME 类型*(也叫 **媒体类型 / Media Type**,在 HTTP 里正式名称是 *Content-Type)。后来这套机制被 HTTP 协议沿用,成了浏览器判断「这个文件该怎么处理」的核心依据。

一个完整的 MIME 类型长什么样

type/subtype; parameter=value

以 text/html; charset=utf-8 为例:

部分值含义
type(主类型)text大类,共 9 种
subtype(子类型)html具体格式
parameter(参数)charset=utf-8附加信息,如字符集

九大主类型

主类型说明典型例子
text人类可读的文本text/plain、text/html、text/css
image图片image/jpeg、image/png、image/svg+xml
audio音频audio/mpeg、audio/ogg
video视频video/mp4、video/webm
application应用数据,最常见也最杂application/json、application/pdf
font字体font/woff2、font/ttf
model3D 模型model/gltf+json、model/stl
multipart多部分组合,如表单上传multipart/form-data
message消息封装message/rfc822(邮件)

子类型里还有两个约定俗成的后缀:+xml(基于 XML)和 +json(基于 JSON)。比如 image/svg+xml、application/ld+json。看到 +json 就知道它的内容是 JSON 结构。


三、浏览器是怎么使用 MIME 类型的

当浏览器请求一个资源时,服务器会在响应头里带上 Content-Type:

HTTP/1.1 200 OK
Content-Type: image/png

(此处为 PNG 二进制数据)

浏览器的处理逻辑大致是:

  1. 决定内联展示还是下载。text/html、image/*、application/pdf 这类通常直接在页面里渲染;application/octet-stream、application/zip 这类会触发下载。
  2. 决定用哪个解析器。看到 text/html 就走 HTML 解析器,看到 application/json 就走 JSON 解析器。
  3. 决定是否执行脚本*。text/javascript 会被当作脚本执行——这也是为什么*错误地返回用户上传文件的 MIME 类型非常危险。

一个真实的安全教训:MIME 嗅探

早期浏览器有个「贴心」行为叫 MIME 嗅探(MIME sniffing)*:如果服务器返回的 Content-Type 看起来不对,浏览器会自己「猜」内容的真实类型。这导致了一个经典漏洞——攻击者上传一个内容是 HTML 或 JS 的文件,服务器返回 text/plain,浏览器却把它嗅探成 text/html 并执行,形成 *XSS 攻击。

修复方式是让服务器明确告诉浏览器「别猜」:

X-Content-Type-Options: nosniff

加上这个响应头后,浏览器会严格按 Content-Type 处理,不再嗅探。这是每个网站都该配置的安全响应头之一。


四、常见坑与易错点

1. application/octet-stream 是万能兜底,但不是好选择

不知道类型时,服务器常返回 application/octet-stream(意思是「一堆字节」),浏览器会直接下载。能跑通,但语义上等于放弃治疗——用户拿不到正确的文件名后缀,也失去了内联预览的可能。能确定类型就不要用兜底值。

2. .ts 到底是谁?

.ts 有两个完全不同的含义:

  • MPEG-2 传输流 → video/mp2t,这是 IANA 注册的标准类型,也是本表采用的值
  • TypeScript 源码 → 没有官方注册类型,社区常用 text/ts 或 application/typescript

冲突的根源是「扩展名先到先得」。TypeScript 官方文档也承认了这个冲突,建议在配置服务器时按实际用途手动指定。

3. .js 的 MIME 类型改过好几次

JavaScript 的类型经历了 application/javascript → application/x-javascript → 现在 IANA 和 WHATWG 都推荐 text/javascript,主流服务器与 CDN 均已跟进。如果旧代码在判断 JS 类型,记得把这三种都考虑进去。

4. .md 的官方类型是后来才有的

text/markdown 直到 2016 年才正式注册。在此之前大家普遍用 text/x-markdown,甚至干脆用 text/plain。新项目应当使用 text/markdown。

5. 服务器自带的类型表可能过时

Nginx 的 mime.types、Apache 的 mime.types、IIS 的类型表版本各不相同。像 .webp、.avif、.woff2、.wasm 这些较新的格式,老版本服务器可能不认识,会返回 application/octet-stream。遇到「文件能下载但预览不了」,先查服务器的 MIME 配置。


五、怎么正确设置 MIME 类型

Nginx

include /etc/nginx/mime.types;
default_type application/octet-stream;

types {
    image/avif  avif;
    image/webp  webp;
    font/woff2  woff2;
    application/wasm wasm;
}

Apache

AddType image/avif .avif
AddType font/woff2 .woff2
AddType application/wasm .wasm

PHP

header('Content-Type: application/json; charset=utf-8');

Node.js / Express

res.type('application/json');

六、和 MIME 类型经常一起出现的几个概念

概念作用和 MIME 的关系
Content-Disposition控制内联显示还是下载常配合 Content-Type 使用,值为 attachment 时强制下载
Accept 请求头客户端声明能接受哪些类型服务器据此做内容协商
Content-Encoding说明是否用了 gzip / br 压缩与 MIME 是不同维度,别混淆
文件扩展名文件名后缀只是约定,不决定类型
文件魔数文件开头的特征字节判断真实类型最可靠的方式

一句话记住:扩展名是给人和系统看的「名字」,MIME 类型是给程序看的「身份」,文件魔数才是「DNA」。三者可能不一致,判断类型时应优先信任魔数,其次是 MIME,最后才是扩展名。


七、本表数据说明

  • 数据来源以 IANA Media Types 注册表为主,辅以各操作系统、浏览器、开发工具的实际约定。
  • 收录原则是优先收录有实际使用场景的类型。同一格式存在多个扩展名的情况(如 .jpg / .jpeg)会分行列出,方便按扩展名直接搜索。
  • 对于没有 IANA 注册的类型(如 .jsx、.vue、.tf),采用社区通行写法,仅作为「约定值」参考,不保证所有服务器都认识。
  • 遇到表里没有的格式,可以查 IANA 官方注册表,或在命令行执行 file --mime-type 文件名 查看。

常见问题 FAQ

MIME 类型和文件扩展名有什么区别?

扩展名只是文件名的一部分,是给人看的「约定」,改名就能变,不代表文件真实内容;MIME 类型是服务器在响应头 Content-Type 里声明的「身份」,告诉浏览器该用什么方式处理这个文件。真正权威的是文件开头的魔数(Magic Number),命令行执行 file --mime-type 文件名 就能看到。

为什么服务器返回的是 application/octet-stream?

application/octet-stream 是「未知二进制数据」的兜底类型,说明服务器没有识别出这个扩展名,于是让浏览器直接下载。常见原因有三种:一是该扩展名不在服务器的 mime.types 配置里;二是文件确实没有对应类型;三是程序输出时没有显式设置 Content-Type。解决办法是在 Nginx 的 types 块或 Apache 的 AddType 里补上映射。

怎么查看一个文件真实的 MIME 类型?

命令行最可靠:Linux / macOS 用 file --mime-type 文件名;Windows PowerShell 用 Get-Item 文件名 | Select-Object -ExpandProperty Extension 看扩展名,或用 certutil 查看文件信息。在浏览器里则可以打开开发者工具的 Network 面板,看响应头的 Content-Type。注意这三种方式原理不同:file 命令读魔数最准,Network 面板看的是服务器声明值。

.ts 文件为什么会有歧义?

因为扩展名分配是「先到先得」。MPEG-2 传输流早在 1990 年代就占用了 .ts,注册类型是 video/mp2t;而 TypeScript 在 2012 年才出现,此时 .ts 已被占用,官方至今没有拿到专属的 IANA 类型,社区只能约定用 text/ts 或 application/typescript。本表按 IANA 标准收录为 video/mp2t,若你的项目是 TypeScript 源码,需要在服务器配置里手动改成文本类型。

X-Content-Type-Options: nosniff 这个响应头是干什么的?

它是用来关闭浏览器 MIME 嗅探的。早期浏览器遇到 Content-Type 不可信时会自己猜测真实类型,攻击者因此可以上传一个内容是 HTML/JS 的文件、让服务器返回 text/plain,浏览器却当成网页执行,造成 XSS。加上 nosniff 后浏览器会严格按 Content-Type 处理,不再猜测。建议所有网站都配置这个响应头。

为什么我的 webp、avif 图片在浏览器里变成下载了?

多半是服务器不认识这些新格式,返回了 application/octet-stream,于是触发下载。解决办法是在服务器补上类型映射:Nginx 在 types 块里加 image/webp webp; 和 image/avif avif;,Apache 用 AddType image/webp .webp。改完记得重载配置(nginx -s reload)并清一次浏览器缓存。

上传文件时前端需要手动设置 MIME 类型吗?

一般不需要。用 FormData 追加文件时,浏览器会自动根据文件读取并带上 Content-Type;直接给 input 选文件也是同理。但如果后端收到的是 base64 字符串或手动拼的 Blob,就需要自己指定,例如 new Blob([data], { type: "image/png" })。注意前端传的类型只是「声明」,服务端一定要重新校验,不能信任。

MIME 类型能决定文件是否安全吗?

不能。MIME 类型只是一个声明字符串,攻击者完全可以伪造。安全做法是「三重校验」:一是按扩展名白名单过滤;二是用服务端库读取文件魔数确认真实类型;三是把用户上传的文件放在独立域名或目录下,并加上 Content-Disposition: attachment 和 X-Content-Type-Options: nosniff,避免被当成脚本执行。

为什么 JavaScript 的 MIME 类型有 text/javascript 和 application/javascript 两种写法?

历史上 JavaScript 的类型换过好几次:最早是 application/x-javascript,后来 RFC 4329 推荐 application/javascript,再后来 WHATWG 的 HTML 标准和 IANA 都改为 text/javascript。目前 text/javascript 是官方推荐值,application/javascript 仍被广泛兼容。写类型判断逻辑时,建议两种都接受,避免漏判。

表里没有我需要的格式怎么办?

可以按优先级依次尝试:一是在本工具顶部直接搜扩展名,看是否有别名或同类项;二是查 IANA 官方媒体类型注册表;三是在命令行执行 file --mime-type 文件名,让系统直接告诉你;四是查看对应软件的官方文档,通常会在配置说明里给出推荐值。如果确实没有官方注册类型,社区通行写法也可以先用,但要知道它只是约定,不保证所有服务器都认识。