针对 pdf.mjs 文件因 MIME 类型错误导致的 Failed to load module script 问题解决方案
Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of “application/octet-stream”. Strict MIME type checking is enforced for module scripts per HTML spec.
pdf.mjs 这种问题该如何处理 nginx
针对 pdf.mjs 文件因 MIME 类型错误导致的 Failed to load module script 问题,以下是基于搜索结果的 Nginx 配置解决方案:
1. 明确问题原因
错误的核心是 Nginx 未正确识别 .mjs 文件的 MIME 类型,导致返回 application/octet-stream,而浏览器要求 JavaScript 模块文件必须为 text/javascript 或 application/javascript。
2. 配置 Nginx 的 MIME 类型
方案一:直接修改 Nginx 配置
在 Nginx 的 http、server 或 location 块中,通过 types 指令显式定义 .mjs 的 MIME 类型:
http {
include mime.types; # 包含默认 MIME 类型配置(如已有可忽略)
default_type application/octet-stream;
# 自定义 .mjs 的 MIME 类型
types {
text/javascript mjs; # 关键:将 .mjs 映射到 text/javascript
}
}
方案二:通过 location 块精准匹配
若需针对特定路径(如 /pdfjs/ 目录下的 .mjs 文件),可添加 location 规则:
location ~ \.mjs$ { # 匹配所有以 .mjs 结尾的请求
types { } # 清空默认 MIME 类型继承
default_type text/javascript; # 强制指定 MIME 类型
add_header Content-Type text/javascript; # 可选,双重保险
}
3. 验证配置并重启 Nginx
- 检查语法:执行
nginx -t确认配置无语法错误。 - 重启服务:运行
systemctl restart nginx或nginx -s reload使配置生效。 - 浏览器验证:通过开发者工具的 Network 面板 检查
.mjs文件的响应头Content-Type是否为text/javascript。
4. 补充说明
-
.mjs与.js的区别
.mjs是 ECMAScript 模块(ESM)的专用扩展名,用于明确标识模块化 JavaScript 文件。若项目使用 ESM,需确保服务器正确识别此类型。 -
路径与权限问题
- 检查
root或alias路径是否指向包含pdf.mjs的正确目录。 - 确保文件权限允许 Nginx 进程读取(如
chmod 644 pdf.mjs)。
- 检查
-
默认 MIME 类型覆盖
若全局配置了default_type application/octet-stream,需通过上述方案覆盖.mjs的默认行为,避免冲突。
5. 参考配置示例
server {
listen 80;
server_name example.com;
# 静态资源路径
location / {
root /usr/share/nginx/html;
index index.html;
# 处理 .mjs 文件
location ~ \.mjs$ {
types { } # 清除继承的 MIME 类型
default_type text/javascript;
}
}
}
通过以上配置,Nginx 将正确识别 .mjs 文件的 MIME 类型,解决模块加载错误。若问题仍存在,建议结合浏览器控制台和 Nginx 日志(error.log)进一步排查路径或缓存问题。
