HandyTools Hub

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- 值当作广泛接受的约定而非标准,并预期终会出现已登记的替代品。

容易踩坑的类型

扩展名正确类型常见错误
.jstext/javascriptapplication/javascript(遗留但仍被广泛接受)
.jsonapplication/jsontext/json,未登记
.svgimage/svg+xmlimage/svg,无效
.xmltext/xml以为只有一个规范形式;application/xml 也在使用
.icoimage/x-icon较新的 IANA 登记为 image/vnd.microsoft.icon
.gzapplication/gzipapplication/x-gzip(遗留)
.webpimage/webp漏掉 image/ 前缀
.mdtext/markdown以为是 text/plain;text/markdown 已登记
.wavaudio/wav一些遗留工具用 audio/wave 或 audio/x-wav
.7zapplication/x-7z-compressedapplication/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 这类自定义扩展名有时需要显式规则,因为它们的类型比主机的默认映射更新。

相关工具

常见问题

为什么 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 团队审校 · 最后更新