遇到访问限制时,事后能复核的是何时、在何种请求环境下得到哪一类状态码。MDN 把响应分为五类。客户端错误中,403 表示已知身份但无内容访问权,401 表示未认证,407 表示须对代理认证,429 表示给定时间内请求过多,451 表示因法律原因无法提供,511 表示需要认证才能获得网络访问。它们对时间和环境的依赖不同,记录字段要能支撑对照。
适用条件
适用于拉取或更新订阅时出现拒绝、限速、网络准入或法律不可用,需要留下可复核记录的情形。依据为 RFC 9110。未列入的码仍保存原始三位码,并标为非标准。不必公开完整订阅 URL,也不涉及具体客户端日志选项名称。
时间类字段:限速、暂时不可用与超时
与时间强相关的码应单独建字段。
- 429:在给定时间内发送了过多请求。应记观察到该码的本地时刻、该窗内大致请求次数(若已知)、是否立即再次请求。没有时间窗就无法判断是否仍处于限速。
- 503:服务器未就绪,常见为维护或过载,用于暂时条件;可能时 Retry-After 应给出预计恢复时间;暂时响应通常不应被缓存。应记收到时刻,以及是否带 Retry-After(无则写未提供)。
- 408:部分服务器在空闲连接上发送,表示希望关掉未使用连接,甚至可能没有先前请求。应记连接是否空闲。
- 413:请求体超过限制,服务器可能关闭连接或返回 Retry-After。订阅更新多为 GET,一般无大请求体;若仍出现,记下时刻与是否有 Retry-After。
- 425:服务器不愿冒险处理可能被重放的请求。应记该次是否可能属于重放及其时刻。
403 并未定义等待多久会解除,记录其时刻是为了给事件排序,不是因为规范给了重试间隔。
环境类字段:身份、代理、网络与法律限制
环境应能区分限制发生在哪一层。
- 方法。GET 得到 200 表示资源在消息体中传输,可作限制未发生时的对照样本。
- 三位状态码。403 与 401 必须分开,后者必须先认证。
- 是否经代理:407 表示认证要对代理完成。
- 网络准入:511 与资源级 403 不同。
- scheme 与 authority:421 表示服务器不能对该组合产生响应。
- 451 应记为法律原因不可提供,不要改写成 403。
- 是否 404:服务器可能用 404 代替 403 以隐藏资源存在。
- 重定向:301、308 永久改 URI;302、307 临时且今后仍用原 URI;303 改 GET;307、308 不得改方法。每跳记状态码与主机是否变化,完整 URI 留本地。
身份是否随路径改变只记是或否,不记口令或完整订阅串。414、431 表示 URI 或请求头过大,应记下当时字段是否异常,而不是继续向外复制完整地址。
记录不完整或限制仍在时的下一步
缺状态码则无法分类,先补三位码。只有 403 时,针对“已知身份被拒绝”处理,不要按 429 去等时间窗,也不要按 503 去读 Retry-After。出现 429 或 503 却没记时刻或 Retry-After,应补一次观察。511、407 先记录当时网络与代理环境再处理认证。451 保持原始码。500 为通用服务器错误,502、504 为网关问题,与访问权分栏保存。未列出的码只保留原码、时间、方法、主机是否变化,不做标准限制类型归类。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status