Clash 文档中心中文使用手册

Clash 怎样根据响应头判断是否应等待后重试

Clash 怎样根据响应头判断是否应等待后重试。了解适用条件、操作步骤与常见问题的排查方法。

更新于 2026/10/4

先读状态码,再决定头字段有没有资格指挥重试

Clash 订阅更新是否「等待后重试」,不能只看某一个头,必须先落到 MDN 的状态码分类。429 表示给定时间内请求过多(rate limiting);503 表示服务未就绪,常见于维护或过载;413 表示请求体超过限制。MDN 明确提到 Retry-After 的,是 503(应尽量给出预计恢复时间)和 413(服务端可能关闭连接或返回该头)。没有状态码,Retry-After 无法单独解释。

判断顺序建议固定为:读状态码 → 看它是 4xx 还是 5xx → 再看是否存在 Retry-After 或与缓存有关的头。200 表示 GET 已取回资源,不需要重试;304 表示资源未修改,客户端应继续使用缓存副本,也不应当成失败去重试。把成功或缓存命中误读成「要再等一会」,会把更新打成额外请求,反而接近 429 的触发条件。

Retry-After 与缓存相关头:有则按其语义等

适用条件:响应是临时性失败,并且带有 MDN 所描述的头。对 503,Retry-After 表示预计多久后服务恢复;这是「应等待后重试」的直接依据。MDN 还要求注意 503 随响应发出的缓存相关头,因为临时条件通常不应被缓存——若把 503 当成可长期缓存的失败页,后续可能根本不会再发更新请求,等待也就失去意义。对 413,若出现 Retry-After,同样表示现在不要继续送这份过大的内容,等该头给出的时间后再说;订阅更新一般是 GET,413 较少见,但头语义仍是「稍后」。

若状态码是 429,定义已要求离开当前时间窗口。若响应里也带了 Retry-After,应按该头等待后再发一次,而不是按更短间隔探测。若 429 没有该头,则不能虚构一个「标准等待秒数」,只能依据「给定时间」做一次明显的空窗,再单次验证。425 Too Early 表示服务端不愿冒险处理可能被重放的请求,也不适合立刻原样重放。

哪些组合意味着不要等待后重试

不是所有失败都该等。400 是请求被当成客户端错误;401 需要先认证;403 是无权限;404 是找不到资源。这些情况下,等待本身不会改变请求是否合法。431 要求先减小请求头再提交,不是靠等待。408 与空闲连接被关闭有关,继续密集重试可能只是反复碰到连接策略。301/308 带 Location 表示资源永久换了 URI;307 要求用原方法去新 URI。它们的下一步是按 Location 改请求目标,而不是对旧 URI 做限流式等待。

失败时的下一步:能读到 Retry-After 且状态码为 503(或 413 给出该头)时,等到期再试一次并重新读状态码。429 则等待窗口,且不得加密集。5xx 中的 500、502、504 没有在该页写成「用 Retry-After 指挥恢复」,不能因为有任意响应头就一律等待后重试。未列出的非标准状态码可能是自定义响应,头字段含义不能按 503 的 Retry-After 规则套用。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status

返回文章索引使用教程