机场订阅是什么:订阅、节点与客户端各管一段
一句话结论
订阅链接是一份会持续更新的节点清单,客户端定期去这个地址取回清单并解析成可选的节点列表,真正承载流量的是节点服务器。三者各管一段:订阅负责「有哪些节点」,客户端负责「怎么连」,节点负责「流量从哪里出去」。
求助帖里出现频率最高的一句话是「我的订阅连不上」。这句话把三样东西揉在了一起:订阅是一份清单,节点是真正在跑流量的服务器,客户端是设备上那个负责把清单变成连接的软件。三者中任何一环出问题,表面现象都可能是「连不上」,但处理方式完全不同——清单取不回来时,再怎么切换节点都没有意义,因为客户端里根本还没有节点这个对象。
把职责边界画清楚,是新手期回报最高的一次投入。之后遇到的绝大多数现象,都可以先归到某一段上,再决定要不要动手。
| 对象 | 它到底是什么 | 谁在维护 | 这一段出问题时的典型现象 |
|---|---|---|---|
| 订阅链接 | 一个会返回节点清单的网址 | 服务商的服务端 | 刷新后列表为空、报错、节点数量不对 |
| 客户端 | 读取清单并发起连接的本地软件 | 你自己 | 节点在但全部超时、显示已连接却打不开网页 |
| 节点 | 境外或中转的服务器,流量的实际出口 | 服务商 | 单个节点红、某地区集体不可用、解锁结果异常 |
一条订阅链接里究竟装了什么?
订阅链接不是节点,它是一个普通的 HTTPS 网址,访问它会返回一段文本。这段文本里逐条写着每个节点的地址、端口、加密方式、传输方式和名字——也就是客户端建立连接所需要的全部参数。你可以把它理解成通讯录:通讯录本身不会打电话,但没有它你也拨不出号。
不同格式的清单封装方式不一样。有的是一整段 Base64 编码的纯文本,解开之后一行一个节点;有的直接就是一份 YAML 配置,除了节点还带着分组和规则。内容层面它们描述的是同一批服务器。
顺带说一句:节点名不是装饰,地区、编号、倍率和用途标签都写在里面,学会在连接前先读名字,可以省掉挨个点测的时间,这部分展开在怎么读懂节点名里的地区与倍率标记。
客户端更新订阅的时候在做什么动作?
「更新订阅」这个按钮背后是一次很普通的网络请求,拆开看只有五步:
- 客户端向订阅地址发起一次 HTTP GET 请求,并在请求头里附上自己的标识(User-Agent)。带这个标识是为了让服务端知道来的是哪一类客户端。
- 服务端根据这个标识决定返回哪种格式。同一条链接,通用客户端来取会拿到 Base64 清单,Clash 类客户端来取可能直接拿到 YAML,这是服务端做的判断,不是链接不同。
- 服务端顺便在响应头里塞进流量信息,包括已用上传、已用下载、总额度和到期时间戳。客户端界面上那条流量进度条,数据就来自这里。
- 客户端解码并解析这份文本,把每个节点变成本地配置里的一条记录,同时保留你自己建立的规则和分组。
- 旧节点被替换。服务端这次没给的节点会从列表里消失,这一步是覆盖而不是合并。
一次请求大致长这样,以下是结构示例,地址与数值均为占位:
GET /api/v1/client/subscribe?token=YOUR_TOKEN HTTP/1.1
Host: example.invalid
User-Agent: clash-verge/2.0
服务端返回的头部里通常有这么一行,也是结构示例:
subscription-userinfo: upload=0; download=32212254720; total=107374182400; expire=1767225600
单位是字节,时间是 Unix 时间戳。客户端把它换算成「已用 30GB / 共 100GB,某月某日到期」显示给你。所以流量数字对不上时,该怀疑的是服务端的统计口径,而不是客户端算错了。
为什么节点列表会自己变多变少?
因为清单是每次现取的,不是一次性下发给你的固定资产。服务端在这几种情况下会改动清单内容:
- 某台服务器被封或需要维护,运维把它从清单里摘掉,你刷新后就少一条;
- 新上了线路或新增落地,清单里多出几条,名字里往往带着新地区或新标签;
- 套餐等级不同,能看到的节点组不同,升级或降级套餐后清单会整体变化;
- 临时活动节点有存续期,活动结束后自动消失。
节点数量的正常波动和「订阅出问题」是两回事。前者是几条节点增减,后者是一次都拉不到或列表整个变空。如果刷新后节点归零,按订阅更新失败的定位方法走,而不是反复点更新。
订阅链接等于账号凭证:泄露之后会发生什么?
这条链接里带着一个 token,服务端只认这个 token,不会再要求输入密码。也就是说,链接本身就是凭证——谁拿到它,谁就能取回你的全部节点清单,顺带从响应头里看到你的流量额度和到期时间。
后果是双重的:一是别人的连接会占用你套餐里的同时在线设备数和流量;二是你在服务商那边的使用记录会混入他人的行为。技术机制层面就这么简单,至于隐私影响的边界在哪、发现泄露后该怎么处理,单独写在机场安全吗:服务商看得到什么。
订阅需要每天更新吗,多久拉一次比较合理?
不需要盯着刷。更新的唯一作用是同步清单,清单没变时,更新一百次结果也一样。
| 使用场景 | 建议的自动更新间隔 | 原因 |
|---|---|---|
| 日常固定几台设备 | 12 到 24 小时 | 足够跟上常规的节点增减 |
| 商家近期公告频繁调整线路 | 6 小时 | 变动期需要更快同步 |
| 移动办公、经常换网络 | 手动为主 | 弱网下自动更新失败容易把列表刷空 |
高频自动更新还有个副作用:部分服务商对订阅接口有请求频率限制,短时间内反复拉取可能被临时拒绝,表现出来又是一次「订阅失效」的假象。
同一条订阅在不同客户端里表现不同,是什么原因?
因为服务端按 User-Agent 发的内容本来就不同,加上各客户端支持的协议范围不一样,同一份清单落到不同软件里就会被裁掉一部分。
| 现象 | 直接原因 |
|---|---|
| A 客户端 30 个节点,B 客户端只有 22 个 | B 不支持其中某几种协议,解析时被跳过 |
| 一个客户端有策略分组,另一个只有裸节点列表 | 前者拿到的是带分组的配置格式,后者拿到的是纯节点清单 |
| 节点名显示乱码 | 编码解析差异,多见于旧版本客户端 |
| 同一节点在两个客户端延迟差很多 | 延迟测试的目标地址和判定方式不同,不具可比性 |
结论是:节点数量少了不一定是机场的问题,先换一个协议支持更全的客户端试一次。各客户端的配置差异在客户端教程栏目里按软件分开写了。
订阅转换是在解决什么问题?
它解决的是格式不兼容:你的客户端只认某种配置格式,而机场给的清单是另一种。转换服务把清单取回来,重新封装成目标格式,再输出一条新链接给你。
代价要说清楚。转换过程中,那台转换服务器必然完整看到你的订阅内容——所有节点地址、端口和凭据。用公开的第三方转换服务,等于把这份清单交给了一个你不了解的第三方。
优先用机场自己提供的多格式订阅链接。确实需要转换时,选择自建或来源可核实的服务,不要把主力订阅丢进随手搜到的转换页面。
重置订阅链接之后,旧链接为什么立刻作废?
因为重置的动作就是在服务端换掉那个 token。服务端拿到请求后只做一件事:按 token 查是哪个账户、该发哪些节点。旧 token 在数据库里已经不对应任何账户,请求会被直接拒绝,和链接格式对不对没有关系。
所以重置有个必然的连带后果:所有设备上的旧链接同时失效,需要逐台重新导入。这也是为什么重置不该随手做,而应该在确认链接可能已经泄露、或者流量出现无法解释的消耗时才执行。
小结
订阅是清单,客户端是执行者,节点是出口,三者各管一段,故障也就分在三段上。看到问题先判断它落在哪一段:列表拉不回来是订阅段,列表正常但全红是节点或本地网络段,能连上却打不开网页是客户端的分流与代理设置段。这个分段习惯建立起来之后,多数排查会在第二步就收敛。订阅链接要当密码看待,不共享、不粘贴进来路不明的转换页面,发现异常再重置也不迟。
常见问题
订阅链接可以直接粘到浏览器里打开吗?
可以打开,但看到的通常是一大段乱码或一份 YAML 文本,那正是客户端要读的原始内容。用浏览器打开的唯一实际用途是确认链接本身还能返回数据,如果浏览器里都是空白或错误页,问题就在服务端或账户状态,而不是客户端。
换手机之后需要重新买订阅吗?
不需要。订阅链接是绑在账户上的,和设备无关,在新设备的客户端里重新导入同一条链接即可。真正会限制你的是套餐规定的同时在线设备数,超出上限时表现为掉线或连接被拒,而不是订阅失效。
订阅更新之后我手动改的节点设置会丢吗?
对节点本身的改动通常会被覆盖,因为节点是从服务端下发的;而你在客户端里建立的规则、分组、自定义 DNS 一般保存在本地配置里,不会被订阅更新冲掉。想保留对某个节点的特殊设置,应该用客户端的规则功能而不是直接改节点参数。
为什么有的机场给了好几条订阅链接?
多数是按客户端格式分的,同一批节点会同时输出通用格式、Clash 格式和其他格式各一条,内容相同、封装不同。少数情况下不同链接对应不同的节点组或不同线路等级,这一点要以商家的说明为准,不要凭链接名猜测。