网络中断后如何恢复浏览器会话
用有界重试、检查点和隐私边界恢复浏览器工作,在网络中断后避免重复副作用,并保留可验证、可审计的结果与清理记录。
BotBrowser Team
网络中断不能证明浏览器动作是否完成。连接可能在请求前、服务器接受后或等待响应时断开。安全恢复需要保留会话分配、记录检查点,并且只重试能够确认完成的操作。
摘要
- 先区分页面请求、websocket、代理路由和控制通道。
- 在一次恢复代次中保持 profile、存储、语言和路由所有权稳定。
- 读取和幂等操作使用有界重试;写入操作先确认再重复。
- 浏览器可见清理、服务器撤销和主机删除是不同边界。
- BotBrowser 可以重放授权检查点,但不能推断外部副作用是否已被接受。
目录
固定会话契约
打开页面前记录任务引用、批准的 profile、存储所有者、浏览器版本、路由策略和 lease 代次。不要记录密码、页面正文或不必要的 URL。修复开始后拒绝旧代次的消息。
将持久意图与易失状态分开。意图包含动作、最后接受的检查点、重试预算和清理规则;打开的页面、内存、websocket 和进行中的请求都可能丢失。
使用检查点和决策表
检查点是应用定义的接受边界:响应已验证、文档已保存到批准位置,或业务操作收到明确确认。导航成功不等于副作用完成。
| 观察到的边界 | 首要动作 | 重试规则 | 预期结果 |
|---|---|---|---|
| 读取无响应 | 重连并重新读取 | 带抖动的有界重试 | 相同的已验证读取或分类失败 |
| 写入无确认 | 查询应用状态 | 只有幂等键允许重复 | 只记录一个结果 |
| 控制通道丢失 | 暂停接纳并协调 | 不盲目重放页面动作 | 一个所有者继续或隔离任务 |
| 路由不可用 | 保持分配暂停 | 不切换到无关路由 | 可见的可恢复失败 |
如果应用没有状态查询或幂等契约,应停在检查点并请求人工协调。
使用有界网络预算恢复
区分请求、websocket、代理和控制故障,设置最大次数和最大时长,并使用有抖动的延迟。坚持声明的路由;改变路由可能改变网络身份,按策略应结束旧 lease 并创建新的会话。
预算用尽后标记可恢复失败,保留最后接受的检查点,排空 context,并隔离不确定的存储。记录代次、版本和类别,但不要记录 token 或私有 URL。
保护隐私并验证结果
Cookie、存储、IndexedDB、缓存、下载和服务器会话有不同生命周期。MDN Clear-Site-Data描述 origin 范围内的清理,不保证远程记录或主机文件被删除。W3C 隐私原则强调目的限制和数据最小化。
用结构化记录比较分配、路由、检查点顺序、完成确认和清理结果。用新的授权 context 验证预期应用状态;异步的服务器撤销应标记为待处理。
BotBrowser 能力与限制
BotBrowser 支持在声明的 profile、版本、路由和 context 中重复授权的会话检查点,并比较受控网络中断后的可见结果,但不能判断未确认写入是否被服务器接受、撤销服务器会话、检查主机全部痕迹,也不能保证运行不中断。应用所有者负责幂等性、授权、保留和最终验收。
相关阅读:长时间运行的浏览器 context 韧性和网络层浏览器一致性。
结论
恢复意图,而不是丢失的连接:固定所有权、检查最后边界、协调不确定写入并限制重试。下一步是在授权 fixture 中注入一次网络中断,同时验证应用结果和清理记录。
常见问题
每个 timeout 都应重试吗?
不应。只有读取或明确幂等的操作可重试;未知写入应先查询状态。
新 context 能继续旧会话吗?
只有策略允许使用同一 profile 且存储完整时可以;易失的页面内存不会自动恢复。
清理浏览器数据会撤销服务器会话吗?
不会。两者是不同边界,需要不同证据。
BotBrowser 验证什么?
它重放授权检查点并比较可见结果,不认证远程副作用或主机删除。