html中script标签加载js报404,主因是请求路径与服务器真实文件位置不匹配;应通过network面板查看实际request url,对照html中src写法(相对路径以当前html位置为基准,绝对路径以域名根为起点),并验证文件是否真实存在于服务端对应路径。

HTML中script标签加载JS文件报404,基本不是代码语法问题,而是浏览器发出的请求路径和服务器上真实文件位置对不上——你得先确认它到底想去找哪儿,再看那儿有没有。
检查Network面板里实际请求的URL
这是最直接的判断依据。打开开发者工具 → Network → 刷新页面 → 找标红的script请求(Status列显示404),点开看Headers里的Request URL。
- 如果URL是
http://localhost/js/app.js,但你的app.js实际在src/js/app.js目录下,说明HTML里写的路径太浅了 - 如果URL是
http://localhost/admin/js/app.js,而你当前页面在/admin/子目录下,那src="js/app.js"就是对的;但如果页面在根目录,这个路径就多套了一层/admin/ - 注意末尾斜杠:路径以
/结尾(如http://localhost/assets/)时,浏览器会尝试找index.html;不以/结尾才可能匹配到JS文件
修正script标签中的src路径写法
相对路径永远以当前HTML文件所在位置为起点,不是以JS文件、CSS文件或当前JS执行位置为准。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- HTML在根目录(
index.html),JS在js/main.js→ 用src="js/main.js" - HTML在
pages/about.html,JS在js/main.js→ 用src="../js/main.js"(先跳出pages/,再进js/) - 不想算层级?统一用绝对路径:
src="/js/main.js"(开头带/,从域名根开始) - 避免
./前缀——部分构建工具(如某些Webpack配置)会忽略它,行为不一致
验证文件是否真在服务器对应路径下
别只看本地文件夹结构,要确认部署后它是否真的出现在Web服务器能服务的位置。
- 用
curl -I http://localhost/js/main.js测试,看返回是不是200 OK和Content-Type: application/javascript - Linux/macOS服务器严格区分大小写:
Main.js≠main.js;Windows开发时没报错,上线就404 - 检查是否误存为
main.js.txt(Windows默认隐藏扩展名),文件系统里实际名字比你看到的多一截 - 如果是Vite/Vue/React项目,确认
main.js放在public/下(静态资源)还是src/下(需构建);后者不会直接被HTTP访问,必须走构建输出目录
排查构建工具和部署配置干扰
现代前端工程里,路径问题常被base、publicPath或代理规则悄悄改掉。
- Vite项目检查
vite.config.ts中base字段:设为"/myapp/"时,所有相对路径都会自动加前缀,src="js/app.js"实际请求的是/myapp/js/app.js - Webpack用户看
output.publicPath,它控制运行时资源前缀,和html-webpack-plugin生成的script路径联动 - Nginx/Apache若配了
alias或rewrite,可能把/js/映射到别的物理路径,但日志里看不到重写痕迹,得查配置 - 本地用
npx serve -s没问题,但用python -m http.server就404?因为后者不支持单页应用的history fallback,也不处理publicPath,仅适合纯静态文件
最容易被忽略的是:你以为改对了src,但构建产物没更新,或者CDN缓存了旧的HTML——清掉浏览器缓存、关掉Service Worker、甚至临时禁用CDN再试一次。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










