博客
能高亮的是出口。只能刷新的是 URL。
主界面列表里能看见的,通常是两种东西。开关打开时只会用当前高亮的记录。Subscribe 是容器:里面是 URL,子记录要刷新之后才出现。规则配置是第三种,不出现在这一列里。
三种对象
互不替换
换高亮行不会换规则;换规则也不会换高亮行;刷新容器不会改 FINAL。把这三者当成「同一次导入的三份拷贝」,后面所有对照都会乱。手册把字段级说明放在 对象 与 配置;本篇只处理一个观察上的错误:看见列表空了、或看见很多行,就以为出口已经就绪或已经坏了。
记录有地址、端口、协议、认证、传输层。它可以被高亮。没有「刷新」——远端改了端口,本地这条不会自己变,只能编辑或删掉重建。类型是这条记录的身份,不是标签。选 Trojan、密码却是 Shadowsocks 的,能存下来,隧道握手会失败。传输层属于记录本身:远端用 WebSocket,本地却留在 TCP;路径、Host、gRPC 服务名填成另一套——都能保存,都不能握手。排障时把「协议类型」和「传输层」当成两个独立检查项,不要只核对地址和端口。
SNI、是否跳过证书验证、指纹,决定 TLS 能不能完成。证书与系统时间有关:时间未自动同步时,所有依赖 TLS 的记录会一起失败,换一行也没用。一条记录只描述一个出口。它不包含规则,也不包含「连上之后自动换成另一条」。列表探测看到的毫秒数,只说明这一跳此刻探不探得通,见 读数。
容器
保存和刷新是两步
容器保存的是 URL。保存这一步不下载子记录。刚保存完,集合可以是空的,对容器来说这是正常状态,不是「订阅坏了」。刷新才去拉;成功则用返回内容生成或替换子记录,这些子记录随后可以像普通记录一样被高亮。失败时不会为了失败把已经在的行抹掉——你看到的仍是上一次成功的集合,可能已经过期,但还在。
打开应用时刷新、后台刷新,都是在重复「刷新」。后台能否执行,还看系统是否允许该应用后台刷新,以及设备是否在省电。这是 系统 边界,不是容器开关没打开。刷新请求走当时的网络路径。开关正连着一条已失效的记录时,刷新本身也可能失败。把策略改成 Direct 或先关掉开关,是在隔离路径,不是在修复 URL。URL 返回 404、401、空文件,客户端只能报告失败,不能替远端把链接续上。
用浏览器打开订阅 URL,常常得到一段不能当网页看的内容。那是给客户端解析的。浏览器能下到字节,说明链路通、链接本身还活着;浏览器也打不开,问题在网络或链接,不在 Shadowrocket 的解析器。ss://、vmess://、trojan:// 把字段打包成一行,能整段贴进添加入口时,比手抄 UUID 少出错。把整段贴进「服务器地址」那一个格子,通常不会被当成 URI 解析。
扫码得到的可能是一条记录,也可能是一个容器 URL,也可能是一份配置的下载地址。保存之后看它能不能被高亮:能高亮、字段里是主机和端口的,是记录;只能展开、点进去是 URL 的,是容器;进了配置列表而不是服务器列表的,是配置。同一张码被扫两次,列表里可能出现两条相同的记录。连接时仍然只用高亮的那一条,重复行不会叠加带宽,只增加选错的机会。
服务器容器的刷新更新的是列表里的子记录。规则 / 配置订阅的刷新更新的是名单文件。两个 URL 长得像,对象不是一个。刷新了容器,FINAL 不会变;刷新了规则,高亮行也不会变。
很多行
连接时只用一行
列表允许很多记录、很多容器。连接时仍然只使用当前高亮的那一条。两个容器不会自动负载均衡,也不会自动改选「探测数字最小的那一行」。探测数字再小,没被高亮,开关打开后也不会用它。删除容器时,由它生成的子记录通常一并消失。若当前高亮属于这个容器,删完需要另选一行再开开关。
把容器里的某一行再手动复制成独立记录,以后刷新就不会动这份副本。远端改了端口,副本不会跟着改,需要自己编辑。这是「冻结一行」和「继续跟随 URL」之间的取舍。许多容器把令牌放在路径里。出现在截图、群文件、公开网盘上,等于交出子记录的访问权。客户端不会替你作废一条已经泄漏的 URL,也不会通知远端去换链。导出备份同样含认证参数,按密钥保管。
应用不能延长某条 URL 的有效期,不能代付服务器费用,不能把握手失败的记录变成可用。这些在系统章里归为做不到的事,不是设置项没找到。装完应用之后列表是空的,也是正常状态:商店许可不含出口,见 商店。
把容器当成记录去高亮,或把记录当成容器去等刷新,都会在错误的对象上操作。前者:点了不能当出口的那一行,开关打开后没有可用的握手对象。后者:一条手写记录永远不会因为你下拉列表而从远端把端口改过来。判断方法仍然简单:这一行有没有主机和端口、能不能被选中当作当前出口。能,就是记录;不能、只能看到 URL,就是容器。配置文件还要再到另一个入口里确认当前勾选的是哪一份。三处都看过,再谈「为什么网页还是原来的样子」。