404错误本质是路径与磁盘文件不匹配,排查须聚焦路径真实性:检查href隐藏字符、大小写、base标签影响、Network面板确认实际请求路径、W3C验证HTML语法、静态资源上下文路径及代理重写问题。

404错误不是服务器挂了,而是它听懂了你的请求,但翻遍整个目录都没找到你要的文件——所有排查必须围绕“路径是否真能对应到磁盘上的某个文件”展开。
检查 href 值是否含不可见字符或格式错误
复制粘贴来的链接常带隐藏问题,浏览器地址栏里看不出来,服务器却会拒收。
- 全选
href属性值 → 粘贴进记事本(非 Word 或富文本编辑器),观察是否有开头/结尾空格、全角冒号:、中文引号“”、或换行符 -
href="blog"和href="blog/"在多数服务器上是两个不同资源:前者可能被重写为blog.html,后者才指向目录索引 - Linux 服务器对大小写敏感:
about.html≠About.html;Windows 主机虽不敏感,但 CDN 或反向代理层可能区分 - 若用了
<base href="/sub/">,所有相对路径都会被前缀补全,此时href="page.html"实际请求的是/sub/page.html——要检查base路径本身是否拼错
用 Network 面板确认浏览器真实发出的请求路径
别信地址栏显示的 URL,要看浏览器实际发出去的是什么。很多“拼写错误”其实是 JS 动态改了 href,或者点击触发了拦截逻辑。
- F12 → Network → 勾选 Preserve log → 点击链接
- 在列表中找到对应请求,看
Name列:它显示的是浏览器真正请求的路径,和你写的href可能不一致(比如相对路径被补全、JS 插入了 query 参数) - 右键该请求 → Copy → Copy full URL,粘贴到新标签页直访——如果也 404,说明路径本身无效;如果能打开,问题出在原页面的 JS 或 CSP 策略
- 状态码为
0?大概率是跨域、file://协议限制,或目标站返回了Connection: close,和拼写无关
验证 HTML 中 href 是否被错误解析
W3C Validator 不查 404,但能揪出导致解析失败的硬伤,这类问题会让 href 根本没被浏览器当成有效链接。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 打开 W3C Nu Html Checker,粘贴完整 HTML(必须含
和 <code>) - 重点看 Error 级提示,例如:
Bad value "blog/post" for attribute "href" on element "a"——这说明你漏了引号,实际生成的是<a href="blog/post"></a>,浏览器只取到blog就截断了 - 若提示 “not an absolute IRI”,不是拼写问题,而是 W3C 认为它无语义;若真要锚点跳转,确保目标
id存在且合法(不能以数字开头、不能含空格) - 避免把
<a></a>嵌在<p></p>里又套<div>,嵌套混乱可能导致部分浏览器丢弃 <code>href确认静态资源是否在 Web 应用上下文中(Tomcat/Jetty 场景)
本地双击打开 HTML 时
<iframe src="report.html"></iframe>能加载,但部署到 Tomcat 或 Jenkins(Jetty)后报 404,根本原因是服务器不按文件系统路径解析相对 URL,而是按当前请求 URL 路径拼接。- 比如浏览器地址是
http://localhost:8080/myapp/overview.html,则src="report.html"会被解析为/myapp/report.html;但如果实际文件在/myapp/static/report.html,就必然 404 - 改用绝对路径:
src="/myapp/static/report.html" - 避免
../:src="../data/index.html"在 Jetty 和 Stapler 中几乎必错 - Tomcat 默认只服务
webapps/yourapp/及其子目录,webapps/static/是独立应用,不能跨上下文引用
最易被忽略的是:路径看起来完全正确,但服务器运行在容器或代理之后,而代理转发规则悄悄重写了路径前缀——这时 Network 面板里的
Request URL和你本地文件结构之间,永远隔着一层未被审视的配置。 - 比如浏览器地址是










