Clash 更新订阅时若返回 HTTP 404,表示服务器找不到这次请求所指定的资源。MDN 说明:在浏览器语境下,这通常表示 URL 不被识别;在 API 语境下,也可以表示接口路径有效,但具体资源并不存在。因此见到 404,应先核对路径(含查询串所标识的那一段资源)是否仍指向预期订阅,而不是先改网络或断定账号作废。
适用条件
只在已经看到明确状态码 404 时使用本流程。没有任何状态码(解析失败、连接重置、握手中断)时,请求尚未完成,不能按路径错误处理。若实际是 401,语义是未认证,应核对接凭据。若是 403,客户端身份已知但没有访问权。还须记住:服务器也可能用 404 代替 403,用来对未授权客户端隐瞒资源是否存在,此时路径字面未必写错。若码是 410,内容已永久删除且无转发地址,与「当前 URL 找不到」不是同一判断。
核对路径的步骤与判断依据
- 确认属于 4xx 中的 404,排除 400(畸形语法、非法报文分帧或欺骗性路由)、414(URI 长于服务器愿意解释的长度)、405(方法不被目标资源支持)和 421(请求的 scheme 与 authority 组合在该服务器上无法产生响应)。
- 将订阅地址拆成主机与路径。多一段目录、少一段标识、多一个斜杠、复制时截断、把查询参数粘进路径,都会让「被请求的资源」变成另一个标识。判断依据是:浏览器意义上的 URL 不被识别,就会 404。
- 仅修正路径后若变为 200,对 GET 而言表示资源已取出并放在响应体中,说明原先就是资源定位不对。若变为 301 或 308,资源已永久换到响应里给出的新 URL,应改用新位置再取。若变为 302 或 307,属于临时改位;302 还要求以后仍使用原来的 URI。
- 路径结构完整仍 404 时,按 API 解释检查「端点在、资源不在」:订阅 ID 拼错、旧资源已撤、或服务器故意用 404 隐藏存在性,都会维持 404。此时不要反复改主机名。
失败时下一步
路径核对后仍是 404,保存脱敏后的路径层级(去掉令牌),并注明不能单凭 404 宣布账号失效。若出现 5xx(500、502、503、504),问题在服务器或网关,改路径通常不会变成 2xx。在看到成功类响应之前,不要假定订阅正文已更新。
资料来源: https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status