MIME 类型查询
按文件扩展名查找 MIME 类型。
您的数据永远不会离开浏览器
显示 0 共 0 条结果
| 扩展名 | MIME 类型 | 分类 | 描述 | 复制 |
|---|
MIME 类型查询是一个快速参考,用来为文件找到正确的 Content-Type 值。按扩展名搜索、按类别筛选,或粘贴一个 MIME 字符串看看它是什么意思。它面向 Web 开发者、后端工程师,以及任何在排查文件上传、下载、邮件附件或 CDN 响应头的人。
使用方法
- 在搜索框输入
webp这样的扩展名,或video/mp4这样的完整类型;结果会随输入逐步收窄。 - 按类别筛选,把表格缩小到文本、图片、音频、视频、文档、压缩包或字体。
- 当类型名称本身有歧义时,查看描述列。
- 点击任意一行的复制按钮,把精确的 MIME 字符串放进剪贴板。
- 清空搜索和类别,查看完整的嵌入式数据库。
为什么 Content-Type 响应头决定一切
当服务器响应时,浏览器会先读取 Content-Type 响应头,再决定如何处理响应体。text/html 会被当作页面解析;text/css 会被当作样式表应用;text/javascript 会被当作模块执行;application/octet-stream 会被当作下载文件提供。值写错了,浏览器就会做出错误判断。典型症状包括:样式表以 text/plain 返回导致页面没有样式,.js 文件以错误类型返回导致模块导入拒绝加载,图片以 octet-stream 返回导致下载而非渲染。
当响应头缺失或过于笼统时,浏览器会退回到 MIME 嗅探:检查开头的字节并猜测。嗅探拯救了许多配置错误的站点,但也带来安全风险,因为一个看起来像 JavaScript 的文件,可能在上传为图片后被执行。服务器用 X-Content-Type-Options: nosniff 来防御,这个头告诉浏览器信任声明的类型、停止猜测。文本类型还带有 charset 参数;如果声明的 charset 与实际字节不符,就会出现乱码,而对于模块脚本,浏览器可能直接拒绝该文件。
解读 MIME 类型
一个 MIME 类型的形状是 type/subtype,可选地后跟参数:
text/html; charset=utf-8
- type 是大的族别:
text、image、audio、video、application、font。 - subtype 指明格式:
html、png、json、vnd.openxmlformats-officedocument...。 - parameters 对其进行细化,最常见的是文本的
charset或媒体的codecs。 - 结构化后缀(如
+json或+xml)标记基于通用格式构建的文档类型。
结构化后缀让通用工具可以继续工作。例如 application/manifest+json 是具有特定含义的 JSON,因此任何理解 application/json 的消费者也能读取它。相比之下,x- 前缀表示该类型从未被正式登记:application/x-yaml 和 application/x-tar 是熟悉的例子。请把 x- 值当作广泛接受的约定而非标准,并预期终会出现已登记的替代品。
容易踩坑的类型
| 扩展名 | 正确类型 | 常见错误 |
|---|---|---|
| .js | text/javascript | application/javascript(遗留但仍被广泛接受) |
| .json | application/json | text/json,未登记 |
| .svg | image/svg+xml | image/svg,无效 |
| .xml | text/xml | 以为只有一个规范形式;application/xml 也在使用 |
| .ico | image/x-icon | 较新的 IANA 登记为 image/vnd.microsoft.icon |
| .gz | application/gzip | application/x-gzip(遗留) |
| .webp | image/webp | 漏掉 image/ 前缀 |
| .md | text/markdown | 以为是 text/plain;text/markdown 已登记 |
| .wav | audio/wav | 一些遗留工具用 audio/wave 或 audio/x-wav |
| .7z | application/x-7z-compressed | application/7z,不是真实类型 |
实操示例
- 一个 CSS 文件以
text/plain返回,导致站点没有样式。查询css确认正确值是text/css;设置该响应头会一次修复所有页面。 - 某个文件输入只接受 PDF。工具返回
application/pdf,把它写进accept="application/pdf",这样改过名的.txt文件也会被拒绝。 - 上传到 S3 的对象到达时没有类型。查询会显示该扩展名应有的 MIME,让你在预签名 PUT 上设置
ContentType,使对象之后被正确提供。 - 一个 YAML 配置以
application/octet-stream返回,所以它被下载而不是在浏览器中打开。查询显示application/x-yaml,大多数编辑器接受它,而较新的 API 可能更偏好已登记的application/yaml。
准确性与局限
数据库保存的是一组精选的 40 多种常见类型,而不是完整的 IANA 登记表。按扩展名查询使用子串匹配,这很方便,但对非常短的查询可能返回无关条目。按 MIME 类型查询会去掉分号后的参数并做精确匹配。浏览器行为不在这份数据范围内:正确的类型是符合标准的必要条件,但不能保证每个浏览器都能渲染给定格式,因为编解码器支持仍有差异。工具也不知道你的服务器配置。静态主机和 CDN 会从文件扩展名推断类型,通常是对的,但 .avif 或 .webmanifest 这类自定义扩展名有时需要显式规则,因为它们的类型比主机的默认映射更新。
相关工具
- HTTP 状态码速查 — 把正确的 Content-Type 与正确的状态码配对。
- JSON 格式化 — 在作为 application/json 提供前验证载荷。
- Base64 编解码 — 为邮件里的 Content-Transfer-Encoding 编码二进制数据。
常见问题
为什么 text/javascript 比 application/javascript 更被推荐?
两者在浏览器里都能用,但 IANA 在 2022 年把 text/javascript 登记为 JavaScript 的标准类型,所以它是当前正确的值。较旧的 application/javascript 仍出现在教程和框架里。如果你返回其中一种却带了错误的 charset,模块脚本可能拒绝执行。
为什么 Content-Type 写错了 Chrome 还是能渲染文件?
浏览器会做 MIME 嗅探:当声明的类型缺失或过于笼统时,它们会检查字节内容来猜测。发送 X-Content-Type-Options: nosniff 可以禁用这种猜测,这就是想要严格行为的服务器会加上这个响应头的原因。
HTML 文件上传控件应该接受什么 MIME 类型?
为精确起见请使用基于值的类型,例如 accept="application/pdf" 或 accept="image/*,application/pdf"。accept 属性也懂 .pdf 这样的扩展名,但 MIME 类型对改过名的文件依然有效,做校验时通常这才是你想要的。
为什么 .yaml 被列为 application/x-yaml?
x- 前缀标记的是未登记的事实类型。application/x-yaml 是许多工具输出的值,而较新的 RFC 9512 登记的是 application/yaml。本查询列出广泛遇到的 x- 形式,方便你在实际环境中认出它。
搜索会匹配部分字符串吗?
会。搜索框会在扩展名、MIME 类型和描述上匹配子串,所以输入 mp 会同时返回 mp3 和 mp4,输入 js 也会带出 json,因为 json 含有这些字母。想要精确列表时请按类别浏览。
我能把 MIME 类型和它的 charset 一起复制吗?
复制按钮只复制 type/subtype,例如 application/json。对于通过 HTTP 提供的文本格式,你通常需要自己追加参数,例如 text/html; charset=utf-8。
由 HandyTools Hub 团队审校 · 最后更新