不是运营史,是接口、协议、错误页、客户端的考古。那些你只在故障时见过一次、后来再也找不到的东西。
这是 B 站最有名的"故障界面"之一:整屏浅灰/白底,中间一行「非常抱歉」,下面跟一行小字(大意是"页面加载失败"或"服务器开小差了"),没有任何 B 站配色、没有 logo、没有返回按钮。
它之所以值得考古,是因为它不像 B 站——没有粉色、没有小电视,像是直接从某个通用错误模板里贴过来的。后来改版后,错误页逐渐换成了带插画的风格化页面,"非常抱歉"这四个字反而成了老用户的共同记忆。
同类还有:视频被删除时的「啊叻?视频不见了?」、稿件审核中的提示页、以及 412/风控拦截页。
延伸:它甚至配过提示音。公众号「ARC」有一篇专文《当"非常抱歉"静了音:B站失效提示音考古》,专门考据这声提示音的来历与消失——这是少见的、把"错误页"当成对象做完整考据的中文文献。
参考文献:ARC《当"非常抱歉"静了音:B站失效提示音考古》 · 专栏《B 站 UI 十年变迁 2009-2019》 · 2021-07-14 机房故障致歉报道「非常抱歉」并没有被废弃,它今天仍在服役——而且它的出现本身就是一条诊断信息:
看到「非常抱歉」
├─ 强制刷新(Ctrl+F5)→ 恢复
│ ⇒ CDN 节点问题:边缘缓存过期 / 回源失败 / 节点被摘
│ 典型:某个地区、某个运营商才复现
│
└─ 刷新多次仍是它,且换网络(4G/热点)也一样
⇒ 源站问题:服务器挂了 / 网关 5xx / 上游数据库不可用
典型:全网同时反馈(如 2021-07-14 机房故障)
换句话说,这页是用户侧的免费分诊表:单点复现=CDN,全局复现=源站。运营侧也常拿它当"降级兜底页",用最轻的静态页挡住故障流量,避免把后端打穿。
备注:判断逻辑来自实际故障表现(单点 vs 全局),非官方文档;但"轻量静态兜底页"是业界通用做法。风控触发时返回 412 Precondition Failed,页面表现为一个极简的拦截提示。早期对 UA、Referer、Cookie 的校验比现在宽松得多,很多第三方客户端就靠伪造这几个头工作。
2020 年 3 月,B 站把视频 ID 从纯数字的 av 号改为 BV 号。两者存在确定性换算(av↔BV 互转算法公开流传),这也是为什么老链接至今仍能跳转。
// 思路:av 号做位运算混淆 → 按固定字母表映射 → 加 "BV1" 前缀 // 社区实现多为:XOR 常量 + 换表 + 分段拼接来源:切换公告与社区公开的互转实现
从 bilibili.us 时期的 AVFUN 血脉,到 bilibili.com 主站;早期还有邀请码注册、100 分转正答题。接口域名长期以 api.bilibili.com 为主,App 侧另有 app.bilibili.com,近年大量接口 gRPC 化。
Web 接口长期带 appkey + sign(对参数排序后加 salt 做 md5)的组合;App 接口另有 access_key、ts、以及后来的 w_rid/wts(前端 JS 计算的签名)。这套东西是第三方客户端永远的痛点,也是每次"接口失效"的根源。
早期播放器是 Flash 的,2016 年前后全面转向 HTML5;之后引入 DASH 分片(dash/ 目录 + baseUrl 列表),1080P+ 与 HDR 走不同清晰度 ID。再往后是 PCDN(P2P + CDN 混合),也因此长期存在"上传占带宽"的争议。
接口里的 qn / quality 是数字编码(如 80 = 1080P、112 = 1080P+、120 = 4K),不同登录态与大会员态能拿到的上限不同。老第三方客户端里这张映射表是必备件。
早期弹幕是一次性拉一个 XML(comment.bilibili.com/<cid>.xml);后来改成按 6 分钟一段的 protobuf 分片(I0…In),服务端按段返回,客户端拼接。这也是"超长视频弹幕加载慢"的技术原因。
分片命名:{cid}/I{段号}.bin 段长:360 秒
字段:progress(毫秒) / mode / fontsize / color / midHash / content
BV 号不是随机串,它是把 av 号做偏移 + 异或后,按一张 58 字符的字母表重新编码,再按固定位置填进 BV1??4?1?7?? 这个模板。
算法要点(社区公开实现): table = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF" (58 字符) 位置 = [11, 10, 3, 8, 4, 6] // 6 位有效字符在 12 位 BV 串里的下标 av→BV : x = (av ^ 177451812) + 8728348608,再按 58 进制填位 BV→av : 取位 → 58 进制还原 → (x - 8728348608) ^ 177451812
考古最可靠的一手材料是存档快照。下面这些链接可以直接跳到 Internet Archive 的历史抓取列表:
以下为 2015–2016 年前后的页面截图,来源为当年网友保存的第三方存档,非官方存档,仅作技术考古展示。
这五年的变化不再是"配色与栏目",而是分发、协议与形态。以下按年份记,未标来源的属社区共识/实际表现。
3 月起视频 ID 从 av 迁到 BV,老链接靠换算继续可用(见第六节工具)。同年前后开始大规模使用 WebP 封面与自适应码率。
配图:约 2020 年首页(第三方存档,来源 csdnimg.cn)
DASH 成为默认分发形态(音视频分离 + 分段),1080P+ / HDR 走独立清晰度;弹幕从 XML 全量改为 protobuf 分片(6 分钟一段),并加入密度控制与关键词屏蔽。
配图:约 2021 年登录页 —— 密码/短信双入口 + 扫码 + 微信登录(第三方存档,来源 bunian.cn)
也是这一年,PCDN(P2P + CDN 混合)在高峰期被大量使用,"上传占带宽"的争议从这里开始。
PC 首页从"分区入口 + 排行"变成推荐流为主:左侧固定导航、中间无限流、右侧热榜/动态。首屏几乎不再承担"导航"职能,而是算法入口。
配图:约 2022 年首页,导航已出现「纪录片 / 知识 / 资讯 / 时尚」(来源 xpwin7.com)
手机端引入全屏竖屏播放(上滑切换),接口层新增一套竖屏推荐参数;PC 端同步出现"竖屏"筛选。这是 B 站第一次从"横屏内容库"向"短视频形态"妥协。
Web 接口从 appkey+sign 逐步转向 w_rid + wts(前端 JS 计算,参数排序 + 盐 + md5),并叠加 buvid3 等设备指纹。第三方客户端的失效周期从"月"缩短到"周"。
搜索结果与推荐里 AI 摘要占比上升;客户端开始统一使用同一套 gRPC 网关,PC/手机/车机共用接口,差异只在渲染层。
对考古的意义:能观察到的"页面差异"越来越少,差异都下沉到接口与风控——这也意味着"截图考古"的时代基本结束了。
页面层已高度同质:同一套组件、同一套推荐位,能看见的差异基本消失;风控与签名全在前端 JS 与设备指纹里,AI 摘要进入搜索与推荐。