GET /users/9999 → 404 Not Found前端按 4xx 知道是「找不到」,切到空状态「这里什么都没有」并给返回列表入口;监控不会误报故障。
数据与服务 · 网络与接口
404 Not Found 的意思是服务器找不到这个资源:路由匹配了,但资源查无。它不是服务出错(5xx)、不是请求格式错(400)、也不是永久删除(410);对私有资源无权访问时也统一返 404,避免泄露存在性。前端拿到 404 应展示空状态并给返回入口。
404 最容易和 200、400、403、410 混。下面五条请求每条隔离一个边界,你选一个该返回的码,选错会即时告诉你「应为哪个、为什么」。
你来当服务器。读每条请求的情境,选一个该返回的状态码——选对,工单盖上对应章;选错,会即时告诉你「应为哪个码、为什么」。
/users/421/5用户 42 存在,且在公开目录里,谁都能看。
/users/99992/5数据库里没有 id=9999 的用户,从未存在过。
/invoices/20243/5发票 2024 存在,但属于他人的私有账户,当前用户无权查看。
/posts/summer-sale4/5这篇文章曾经存在,上周被作者永久删除并归档,希望「别再被访问」。
/users/abc5/5路由要求 /users/:id 为数字,abc 不是合法 id。
已判定 0/5:每条请求选一个状态码,选错会即时告诉你边界在哪。
判定台里的每张工单都在说一条边界。把它们并到一张表,离开页面后也能照着分流。
404找不到这个资源,前端给空状态 + 返回入口。410明确「它有过、现在永久没了」,客户端和爬虫据此清理。404不返 403,避免泄露「它存在」、被枚举。400格式就不对,连「查资源」都到不了。5xx责任在服务端,不是「找不到」。409/422资源在、但状态不允许,不是找不到。一句话:404 是「找不到这个资源」。它不说「出错了」(那是 5xx)、不说「请求格式错」(那是 400)、也不说「永久删了」(那是 410);对私有资源,它还要假装「找不到」以保护存在性。
看到下面这些信号再返 404;看到右边的症状请换码,别拿 404 当万能兜底。
一条请求进了服务器,到前端拿到 404 并切到空状态,最短路径是这四步。
列表分页超出范围(如第 99 页)也常返 404,或返回空数组——前者表达「这页不存在」,后者方便前端直接渲染空状态,按团队约定统一即可。
同一个「查无此用户」,返回 404 还是 200/403,决定了前端、网关和安全能不能各司其职。
GET /users/9999 → 404 Not Found前端按 4xx 知道是「找不到」,切到空状态「这里什么都没有」并给返回列表入口;监控不会误报故障。
GET /users/9999 → 200 OK {found:false}HTTP 层看到的是成功:CDN 照样缓存、告警不响、重试逻辑不触发;前端必须逐接口手写「if found」,一旦有人漏判就白屏。
GET /invoices/2024(私有)→ 403 Forbidden对私有资源返 403,等于告诉攻击者「2024 这个 id 是真的、只是你没权限」;攻击者据此枚举 id,再把 404 的剔除。私有无权应统一返 404。
管理员把一个商品页「永久下线」,希望搜索引擎和缓存别再访问它,该返哪个状态码最合适?
术语的技术定义和行为以这些一手或权威资料为准。
和本知识点经常一起出现的概念。