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
)进一步排查路径或缓存问题。