要把 Clash 转发或终止后的 HTTPS 访问做成可追溯记录,关键不是事后回忆“页面有没有打开”,而是把每一次能看见的 HTTP 响应归入标准状态码类别,并单独标出来源(scheme 与 authority 组合)有没有迁移。来源变化常见于重定向、非权威副本、以及请求打到无法服务该组合的主机。下列做法只适用于已经能够读到 HTTP 响应行的记录;证书失败、连接未建立或不在标准列表中的自定义码,不能按邻近码值类推。
适用条件与最小记录字段
适用条件有三点。第一,记录点必须能看见明文响应,至少包括状态码和与位置相关的响应头。第二,对照时以五类划分为准:信息性响应一百到一百九十九、成功响应二百到二百九十九、重定向消息三百到三百九十九、客户端错误四百到四百九十九、服务器错误五百到五百九十九。第三,若收到未列出的码,应标为非标准、可能由服务器软件自定义,禁止用相邻标准码填语义。
每次会话至少记录:方法、原始 scheme 与 authority、状态码、所属类别、以及重定向时响应中给出的新 URL。缺少新 URL 的三字头码只能记“有重定向语义但目标缺失”,不能写成来源已迁移。成功码也不能单独证明来源未变:二百表示请求成功,对 GET 而言是资源已取出并在消息体中传输,它只描述当前这一跳。三百零四用于缓存,表示响应未经修改、客户端可继续使用同一缓存版本,应记为“来源未改、内容未更新”,不要与换源混淆。
按码值判断来源是否迁移
三百零一表示请求资源的 URL 已永久改变,新 URL 在响应中给出,后续入口应改记新地址。三百零二表示 URI 暂时改变,将来还可能再变,客户端以后仍应使用原来的 URI。三百零三要求用 GET 到另一 URI 获取资源,来源与方法会同时变化。三百零七与三百零二语义相近,但用户代理不得改变方法:先前是 POST,重定向仍必须是 POST。三百零八与三百零一类似,新位置由 Location 给出,同样禁止改方法。把“是否允许改方法”写成独立字段,才能区分“换了主机仍是同一操作”和“已经变成另一次取值”。
三百零五曾用于指示必须经代理访问,因带内配置代理的安全顾虑已被弃用。追溯时若出现该码,只标注过时语义,不得当作现行代理指令。二百零三表示返回元数据并非与源站完全一致,而是来自本地或第三方副本,多用于镜像或备份;除该情形外更宜对照二百。四百二十一表示请求打到了无法针对该 scheme 与 authority 组合产生响应的服务器,应单独记为权威组合不匹配,避免与四百零四混为一谈。四百零四在浏览器中常表示 URL 无法识别,在接口场景也可能表示端点有效但资源不存在,服务器还可能用它代替四百零三以隐藏资源,因此不能单独推断来源未变。
网关类失败与失败后的下一步
四百零七表示需要由代理完成认证,说明流量已进入代理这一跳但未完成源站访问。五百零二表示作为网关去取响应时得到了无效响应。五百零四表示作为网关不能及时得到响应。这三类都应把当前节点记为网关或代理 hop,而不是记成目标源本身不可用。五百十一表示客户端需要认证才能获得网络访问,属于接入层,应先于应用层来源变化处理。
判断依据可归纳如下:带新 URL 的三百零一或三百零八记永久新源;带新 URL 的三百零二或三百零七记临时新源并保留原 URI;三百零三记改用 GET 的另址;二百零三记非权威副本;四百二十一记组合不匹配;三百零四记来源未变;五百零二与五百零四记网关断裂。若码值未列出,下一步是保存原始状态行与全部响应头,向该服务器软件说明核对,而不是套用标准释义。若完全没有状态码,下一步是把记录点移到能看见响应行的位置,并避免把传输层失败与 HTTP 来源变化写进同一条记录。
资料来源:https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status