本文要点
410和404最容易混的地方,是410多了一句“已从服务器中永久删除且没有转发地址”
401和403也属于400–499这一档,但它们回答的问题和404完全不同
这句话解释了为什么你有时会遇到“明明没权限,却返回404”的情况

本文目录
先分清:404是“找不到”,410是“永久删了”
如果你在浏览器或接口返回里看到404或410,先记住一条:两者都属于400–499这一档的客户端错误响应,但含义不完全一样。
按MDN对HTTP响应状态码的说明,404 Not Found表示服务器找不到请求的资源。在浏览器里,这意味着无法识别这个URL;在API里,也可能意味着端点有效,但资源本身不存在。
410 Gone则表示请求的内容已从服务器中永久删除且没有转发地址。客户端需要删除缓存和指向该资源的链接。
所以差别可以这样理解:404只说“现在找不到”,不说明这个资源以前是否存在过;410说的是“曾经有,现在被永久删掉了,而且没有给新的地址”。
一个自建情境(示例,不是对某个真实网站的记录):假设你在练习目录里维护一个自建页面,先放一个文件,后来把它删掉,并且不设置任何跳转。这时服务器可能返回410。如果你只是把文件名写错,请求一个从来没存在过的路径,服务器更可能返回404。
适用范围:本文只讲404与410在含义上的差别,以及401、403与404在“没有权限”和“找不到”上的区分。不讲服务器配置方法,也不涉及具体网站的内容管理。
410多出来的那层意思:曾经存在、没有转发地址
410和404最容易混的地方,是410多了一句“已从服务器中永久删除且没有转发地址”。
这句话可以拆成两个条件。第一,内容曾经在服务器上存在过。第二,它被永久删除了,而且服务器没有给出一个新的地址让客户端去别处找。两个条件同时成立,410才比404多出信息量。
如果资源被删掉,但服务器给了一个新的地址,那就属于重定向的范畴,不是410。如果资源只是暂时不可用,也不是410。
MDN还提到,HTTP规范打算把410这个状态码用于“有限时间的促销服务”,并且API不应被迫指出已使用此状态码删除的资源。这两句说明410的用法本身带有“临时性资源到期后永久移除”的意味,但资料没有要求所有删除都必须返回410。
对初学者来说,可操作的判断是:看到410,可以理解为“这个地址上的东西被永久拿掉了,别再指望它回来”;看到404,只能理解为“这次没找到”,不能推断它以前是否存在。
401和403:问题出在身份和权限,不是找不到
401和403也属于400–499这一档,但它们回答的问题和404完全不同。
按MDN的说明,401 Unauthorized虽然标准里写的是“unauthorized”,但从语义上说,它意味着“unauthenticated”。也就是说,客户端必须对自身进行身份验证,才能获得请求的响应。简单说,401问的是“你是谁,你还没证明”。
403 Forbidden表示客户端没有访问内容的权限,服务器拒绝提供请求的资源。MDN特别指出,与401不同,服务器知道客户端的身份。也就是说,403问的是“我知道你是谁,但你不能看这个”。
404问的则是“这个地址上有没有东西”。三者对应三个不同问题:401是身份没验证,403是身份已验证但没权限,404是资源找不到。
一个自建情境(示例,不是对某个真实网站的记录):你在练习目录里放一个自建页面,分别用三种方式请求它——不带任何身份信息、带一个没有权限的身份、请求一个不存在的路径。观察返回的状态码落在哪一档。这个对照只用于理解含义差别,不涉及任何真实系统的访问控制。
为什么服务器有时用404代替403:隐藏资源是否存在
MDN在404的说明里写了一句值得单独拿出来看的话:服务器也可以发送此响应,而不是403 Forbidden,以向未经授权的客户端隐藏资源的存在。
这句话解释了为什么你有时会遇到“明明没权限,却返回404”的情况。服务器这样做,是不想让未授权的客户端知道这个资源到底存不存在。如果返回403,等于告诉对方“这里有东西,只是你不能看”;返回404,则连“有没有”都不透露。
所以判断时不能只看状态码就下结论。看到404,可能是资源真的不存在,也可能是服务器故意用它来掩盖一个存在但无权访问的资源。资料只说明了这种做法的存在,没有给出判断服务器到底属于哪种情况的方法。
这一点对初学者尤其重要:404不等于“这个地址从来没东西”,也不等于“服务器出错了”。它只表示服务器这次没有提供请求的资源。
把四个状态码放在一张对照表里读
下面这张表是编辑根据MDN资料整理的对照,用于区分四个状态码各自回答的问题,不是官方分级标准。
状态码 名称 回答的问题
401 Unauthorized 客户端是否已通过身份验证
403 Forbidden 已识别的客户端是否有访问权限
404 Not Found 服务器能否找到请求的资源
410 Gone 资源是否已被永久删除且无转发地址读这张表的顺序建议是:先看它属于哪一类问题——身份、权限,还是资源是否存在。401和403属于身份与权限,404和410属于资源是否存在。
再看404和410之间的差别:404不说明资源以前是否存在,410明确表示曾经存在、现已永久删除、没有转发地址。
这张表只用于理解含义,不用于判断某个具体网站的行为。资料没有给出这些状态码在搜索引擎收录、缓存处理上的完整规则,本文也不补这些内容。
看到这些状态码时,初学者能记录什么
如果你在浏览器开发者工具或接口返回里看到这几个状态码,可以按下面的顺序做记录。以下为编辑整理的观察方法,不是对某个真实网站的测试记录。
1. 先记下状态码本身和请求的地址。这是最基础的一条,不要只记“打不开”。
2. 如果是401,记下响应里有没有提示需要身份验证的信息。
3. 如果是403,记下服务器是否已经识别了你的身份。
4. 如果是404,不要直接推断资源从来没存在过,也不要直接推断服务器坏了。
5. 如果是410,可以理解为这个地址上的内容被永久移除,且没有给出新的地址。
需要提醒的是,这些记录只描述这一次请求的结果。资料没有说明状态码与搜索引擎收录之间的关系,也没有说明缓存如何处理这些响应,所以本文不对这些方面下结论。
一个边界:本文只讲含义差别,不讲怎么修改服务器让它返回某个状态码。涉及服务器配置的内容不在本文范围内。
观看知识要点视频 18 秒
18秒无旁白要点导览,文字来自已审核正文;完整步骤、条件及参考资料见下方。
参考资料
以下原始资料提供本文依据;请结合日期、适用条件和产品说明查阅。
请结合原始资料的适用条件阅读。
返回浏览器工具 →