这份说明回答一个问题:用 TurboDL 的时候,哪些数据会离开你的机器。
写它不是为了合规凑数。下载工具天然要替你访问网络,所以"它到底往哪儿发东西"值得说清楚, 而不用你自己去翻源码确认。
TurboDL 是一个库,不是一个服务#
这一点决定了下面所有内容:没有我们的服务器,也就没有"我们的服务器收到了什么"这一说。 你在自己机器上跑它,它替你做网络请求,仅此而已。
什么时候会联网#
只有这些时刻,而且都由你触发:
| 时刻 | 请求去哪里 |
|---|---|
| 你提交一个下载任务 | 你给的那个 URL。TurboDL 只访问这一个地址 |
| 分片并发 | 还是那个 URL,用 HTTP Range 请求不同的字节区间 |
| HLS 下载 | M3U8 清单所在的地址,以及清单里写明的分片地址 |
| DNS 解析 | 系统 DNS;如果你配了 TurboConfig.dns,就是你自己填的静态 hosts 或 DoH 服务 |
| 你配了代理 | 你填的代理服务器 |
没有别的出站连接。没有"心跳",没有"上报",没有后台悄悄发起的请求。
不会发生的事#
- 不做使用统计,不收集设备信息、安装量、功能调用次数。
- 不做崩溃上报。异常会在你调用的地方抛出来,由你的程序决定怎么处理。
- 不做更新检查。库不会去问"有没有新版本";CLI 也不会在运行时联网查版本。
- 不读与你无关的文件。它打开的是你指定的目标文件与自己的续传状态文件。
- 不改与你无关的路径。除非你的代码给了它那个路径(例如 JS 插件显式开启了外部目录)。
落在磁盘上的东西#
| 文件 | 说明 |
|---|---|
| 目标文件 | 你要下到哪儿就写到哪儿 |
| 断点续传状态 | 分片进度记录,与你指定的目标文件同目录。任务完成或删除后清理 |
| JS 插件的沙箱目录 | 只有加载 JS 插件时才创建,位于工作目录下的 turbodl-js/<插件目录名>/,含 storage/(插件自己的持久数据)与 downloads/(临时下载) |
插件的沙箱目录名由插件 id 加一段短摘要组成 —— 两个不同 id 的插件不会共用目录, 卸载时清理的是它自己那一份。
关于 JavaScript 插件#
JS 插件跑在嵌入式的 QuickJS 引擎里,每个脚本一个运行时与一个上下文。脚本能做的事被 宿主 ABI 限定:算 URL、拼请求头、生成签名、读写自己的沙箱目录、写日志。
它不经手下载的数据流,也读不到沙箱之外的文件 —— 除非加载它的宿主把 allowExternalDestination 打开,明确允许写外部路径,同时也就明确承担了相应的后果。
插件写的日志进入宿主的日志系统(host.log),落在哪里由你的程序决定,TurboDL 自己不写日志文件。
官网站点#
官网站点是纯静态页面:没有分析脚本,没有 Cookie,没有从第三方 CDN 拉来的字体或图标 —— 样式、图标、脚本都随页面一起发布。打开它就是在看一堆文件,不会因此产生任何"访问统计"。
(更新日志页上的版本信息由 GitHub 的公开 API 在你本地抓取后写进仓库,访客打开页面时不会 触发对 GitHub 的请求。)
如果你发现了问题#
这份说明与代码不一致,就是一个需要修的问题 —— 请在 Issues 里告诉我们。代码里没有做到的事, 文档里就不该写着做到了。