HTTP 状态码 404 全称是 Not Found,中文含义是请求的资源不存在,属于 4xx 客户端类状态码,代表服务器成功收到请求,但是服务器上找不到你请求对应的页面 文件 接口或者资源,它和 HTTP500 有本质区别,500 是服务器内部执行报错,404 是目标资源本身不存在,不是后端程序崩溃,触发 404 非常常见,比如网址输入错误,页面已经删除,文件路径写错,静态资源丢失,后端接口路由没有注册,伪静态 rewrite 规则配置错误,域名目录绑定错误,很多新手容易混淆,以为 404 就是服务器宕机,其实服务器是正常运行的,只是找不到对应的资源,修复核心就是核对请求 URL、路由、文件路径、重写规则,确认资源是否真实存在,下面深度讲解原理、常见原因、排查步骤和区分要点。
404 核心原理
客户端浏览器或者前端发起请求,把 URL 发送给 Web 服务器,服务器根据 URL 去查找对应的静态文件,或者转发给后端匹配路由,如果匹配不到任何资源,服务器就返回 404 状态码,并且一般会展示自定义或者默认 404 页面。
常见触发原因表格
| 故障类别 | 典型原因 |
|---|---|
| URL 书写错误 | 拼写错误,多写少写斜杠,大小写错误 |
| 静态文件问题 | html 图片 css js 文件被删除、移动、重命名 |
| 路由问题 | 后端接口路由没有定义,路由路径和请求路径不一致 |
| 伪静态规则 | nginx apache rewrite 规则错误,转发地址失效 |
| 站点绑定错误 | 域名绑定的网站根目录不对,指向别的文件夹 |
| 资源迁移 | 网站改版、文件迁移之后旧链接失效,也就是死链 |
标准排查修复步骤
第一步 核对浏览器地址栏完整 URL,检查拼写、斜杠、大小写,确认路径是否正确
第二步 如果是静态资源,比如图片 css,检查网站根目录里面对应文件是否还存在,文件名大小写是否匹配,linux 服务器区分大小写,Windows 不区分,这点非常容易踩坑
第三步 如果是后端接口 404,检查后端路由是否已经注册,请求方法 GET POST 和路由定义是否匹配,接口路径是否完全一致
第四步 检查 nginx 或者 apache 伪静态 rewrite 规则,修改之后校验配置语法,确认转发目标有效
第五步 检查网站根目录绑定,确认域名指向的目录就是项目所在文件夹
第六步 如果是旧页面已经永久删除,可以配置 404 自定义页面,或者设置 301 重定向跳转到新地址,处理死链
补充重点区分
404 资源不存在,服务器正常
403 禁止访问,资源存在但是没有访问权限
500 服务器内部错误,后端程序执行异常
自定义 404 页面说明
生产网站一般都会配置自定义 404 页面,提升用户体验,虽然页面显示自定义界面,但是 HTTP 响应状态码依然是 404,这点要注意,不能因为页面能打开就认为不是 404。
【常见问题】
问题 1 http 状态 404 是不是服务器宕机了
回答 1 http 状态 404 代表服务器正常接收请求,只是找不到请求的资源,http 状态 404 不是服务器宕机,服务器本身是可以正常响应的。
问题 2 http 状态 404 和 500 有什么区别
回答 1 http 状态 404 属于 4xx 客户端错误,含义是资源不存在,http 状态 500 属于 5xx 服务端错误,是后端程序内部执行异常,二者故障根源不一样。
问题 3 linux 环境为什么 windows 正常,上传之后 http 状态 404
回答 1 linux 系统区分文件名大小写,windows 不区分,文件名大小写不一致就会出现 http 状态 404,排查 http 状态 404 的时候需要核对文件名称大小写。
问题 4 http 状态 404 可以配置自定义页面吗
回答 1 http 状态 404 支持配置自定义页面,网站可以在服务器设置自定义 404 页面,但是响应状态码仍然保持 http 状态 404。
【免责申明】
本文属于 HTTP 状态码基础科普,不同 Web 服务器和后端框架 404 触发细节存在差异,实际排查请结合项目路由与服务器配置处理,本内容不能替代正式运维方案与测试验证,不作为生产环境操作唯一依据。


