关键是要将后缀映射到标准 mime 类型:.woff2→font/woff2、.avif→image/avif、.mjs→application/javascript、.webp→image/webp、.wasm→application/wasm、.json→application/json;nginx 应通过 include 自定义 types 块配置,禁改默认 mime.types,并设 default_type 防兜底失效。

要让服务器正确识别并交付更多静态资源(比如 .woff2、.avif、.mjs、.webp、.wasm),关键不是“支持格式”,而是确保每个后缀都映射到浏览器能理解的 MIME 类型。Nginx、Apache、IIS、Tomcat 的机制不同,但核心逻辑一致:只看 URL 后缀,查表返回 Content-Type 响应头;配错就导致字体不加载、脚本被拒、图片变下载。
明确后缀与标准 MIME 类型的对应关系
别凭感觉写,优先查 IANA 官方注册表或主流浏览器兼容实践:
-
.woff2→font/woff2(不是application/font-woff2,后者兼容性差) -
.avif→image/avif(Chrome 85+、Firefox 93+ 支持) -
.mjs→application/javascript(ES 模块必需,不能用text/javascript) -
.webp→image/webp(旧版 Nginx 默认未包含) -
.wasm→application/wasm(WebAssembly 运行前提) -
.json→application/json(避免被当成text/plain导致 fetch 解析失败)
在 Nginx 中安全添加映射
不改 /etc/nginx/mime.types,新建自定义文件并 include:
- 创建
/etc/nginx/conf.d/custom.mime,内容为:types {<br> application/javascript js mjs;<br> font/woff2 woff2;<br> image/avif avif;<br> image/webp webp;<br> application/wasm wasm;<br> application/json json;<br>} - 在
nginx.conf的http块中,放在include mime.types;之后、default_type之前或之后均可,推荐顺序:default_type application/octet-stream;<br>include /etc/nginx/conf.d/custom.mime;<br>include mime.types;
- 必须加
default_type,否则未匹配后缀(如.br、.asset)将无Content-Type头,浏览器行为不可控
在 IIS 中解除 404.3 拦截
IIS 对未注册 MIME 类型直接返回 HTTP 404.3(非路径错误,是类型拒绝):
- 打开 IIS 管理器 → 目标站点 → 双击“MIME 类型” → “添加”
- 填入扩展名(含点,如
.apk)和对应类型(如application/vnd.android.package-archive) - 确认“静态内容”功能已启用(Windows 功能 → IIS → WWW 服务 → 常见 HTTP 功能)
- 检查“请求筛选”是否禁用了该扩展名——即使 MIME 正确,白名单不放行仍会拦截
验证是否真正生效
不能只看配置保存了,三步实测缺一不可:
- 运行
nginx -t(Nginx)或appcmd list config(IIS)确认语法合法 - 用
curl -I https://yoursite.com/test.woff2查响应头,确认Content-Type: font/woff2出现且无拼写错误 - 打开浏览器开发者工具 → Network → 找对应资源 → 检查 Headers 和 Console 是否还有
MIME type checking is enforced类警告











