旧订阅地址失效后,更新 Clash 本地记录的依据应是这次请求真正收到的 HTTP 状态码,而不是口头上的「不能用了」。MDN 把响应分成 2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务器错误。其中 410 明确要求:内容已永久删除且无转发地址,客户端宜去掉该资源的缓存和链接。301 与 308 表示资源已永久换到新 URL。404 只表示当前找不到,不能自动等同于 410。把这些码写进本地记录,才能决定是删除、改写还是暂时保留。
适用条件
适用于:旧订阅 URL 更新失败,需要改本地保存的地址或注明停用。新地址尚未验证成功时,不要先删掉全部旧记录。没有任何状态码时,只能记录「本次未完成」,不能当成资源已删除。
按响应码更新本地记录
- 若旧地址返回 410,按规范清理:删除或停用该链接,并去掉仍指向它的缓存说明。判断依据是 410 的「永久删除、无转发地址」,不是暂时连不上。
- 若返回 301 或 308,属于永久改址,本地应改为响应中给出的新 URL,并注明旧地址不再作为长期入口。308 还要求后续使用与原先相同的方法去新位置。不要把永久改址写成账号作废。
- 若返回 302 或 307,属于临时改位。对 302,规范要求以后仍使用原来的 URI。本地可记下曾经跳转,但不要立刻用临时目标覆盖唯一记录,以免源站改回后找不到原地址。
- 若返回 404,先核对路径是否不被识别,或 API 资源是否已不存在。确认不是抄写错误后,再把旧地址标记为「当前找不到」,仍不要直接套用 410 的删除语义。还须考虑服务器可能用 404 代替 403 隐瞒资源存在性,记录里应写「404,原因未分」。
- 若新地址 GET 得到 200,表示新资源已取出;此时把本地主记录改到新 URL,旧记录保留状态码与停用日期即可。若新地址是 401 或 403,说明新入口的认证或权限未就绪,旧记录先不要清掉。5xx(500、502、503、504)应视为服务或网关问题,通常不当作「地址作废」。
失败时下一步
状态码不稳定时,以最近一次完成态响应为准,并避免只根据一次 503 删除记录。对外分享本地变更时使用脱敏 URL,只保留路径结构与状态码。未能区分 404 与 410 时,采取「标记停用、暂不销毁」比误删更稳妥,直到出现 410 或 301、308,或新地址稳定 2xx。
资料来源: https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status