示意图:缓存目录的修改时间列表。真实截图我删了,因为里面有几条不想公开的地址。
事情得从一条通知说起。6 月 2 日晚上十一点四十,也就是我准备关电脑的前一刻,手机弹出一条推送,说 49719浏览器打开app 有版本更新。我本来想直接划掉,但手指在屏幕边缘停了半分钟——因为我忽然想起前段时间做的一个实验:在旧版本里手动删掉的浏览记录,升级之后到底还在不在。这是个很基础的问题,基础到我以为答案早就确定,结果翻完缓存,我发现自己并不确定。
先说清楚我做了什么。我在一台 2021 年买的 ThinkPad 上跑旧版本,管理员账号,缓存目录路径记在一个叫「hw-0612.txt」的记事本里。我清了一次浏览记录,然后故意打开三个页面:一个是本地图书馆的检索页,一个是某个论坛的置顶帖,还有一个我现在已经记不起为什么要打开的页面,标题栏写着「附件下载页(3)」。接着我把 49719浏览器打开app 关掉,进目录,按时间排序,导出文件名列表。整件事花了二十二分钟,中间我倒了第二次咖啡,发现杯子底下压着一张去年九月的快递单,收件人写的是我旧名字。
结果是:清掉的三条记录,在「History」文件里确实不见了,但在另外一个叫「Visited Links」的二进制文件里,三个网址的字符串还完整躺着,十六进制看得很清楚,连查询参数都没被截断。另外,缓存子目录里出现了一个 03:47 生成的文件,名字是一长串哈希,扩展名是 .tmp,大小 11.4 KB。我用十六进制编辑器打开它,前 64 个字节是空的,后面有一段 UTF-8 可读文本,内容是那个论坛帖子的第一段。这说明什么,我当时没想明白,现在也没完全想明白。顺手在整理的过程中,我拿恢复以前49图库内容这条旧笔记做了对照,想看看不同版本的缓存策略有没有差别,结果反而更糊涂了。
这里我要说一个可能不太受欢迎的观点:把浏览器残留文件当作「证据」来读,是一种被严重高估的做法。我承认它有取证价值,但这价值被大量内容稀释了——那些所谓「三分钟找回删除记录」的帖子,几乎都在同一时间点犯同一个错误:把「文件存在」直接等同于「行为发生」。可一个 URL 字符串留在文件里,可能是你访问过,可能是页面重定向链里的一环,可能是预加载,可能是别人用这台机器,也可能只是某个扩展在后台静默拉取。四种可能,字面上看完全一样。我把这个疑虑跟朋友周颖提了一次,她说「你这就是在给所有事情加限定条件」,我说对,我确实是这样的人,而且我不打算改。
回到那个 03:47 的文件。为了搞清楚它是谁写的,我在 6 月 3 日下午两点十七分重新走了一遍流程,这次开着系统自带的文件监控。三次尝试,两次没有生成 .tmp,一次生成了但只有 2.1 KB,内容和论坛第一段无关,是一串 JSON,键名里有「prefetch」这个词。我把这个结果发到一个小群里,群里有个人回了一句「版本差异,正常」,然后就没人再说话了。我不满意这个答案,因为它什么都没解释。什么叫正常?版本差异具体差在哪个函数、哪个清理时机、哪个写入策略上?没人往下说。于是我自己去翻打开浏览器直接进入网站浏览记录这篇文章里提到的路径写法,试着逐条比对,比到第七条的时候我发现自己漏看了一个条件:那次实验我登录的是管理员账号,而生成 03:47 文件的那一次,我切到了普通用户。变量不是我改的那一个。
这就是我困惑的来源。不是「找不到东西」,而是「找到了东西却无法确定它意味着什么」。六月的这十天里我做了七次实验,改了四个变量——账号权限、清理时机、是否联网、扩展是否启用——每一次结果都略有不同,但没有一次能干净地指向单一原因。第 4 次实验之后我停下笔,在记事本上写了一行字:「这不是数学题,这是考古。」考古的意思是,你挖出来的每一件东西都带着自己出土时的层位,你没法把它拎出来单独解释。缓存文件也是这样:它的时间戳、它的目录层级、它被写入时浏览器处于什么状态,全部都参与定义了它。忽略这些,只念一遍 URL,等于把陶片从探方里摘出来,然后说这就是一座城。
中间插一段我自己的私事。6 月 5 日早上七点零五分,我妈给我打电话,说她手机上的浏览器「变了」,页面一打开就是一个她不认识的搜索框,问我能不能远程处理一下。我说你先把手机放平,别动。然后我在电话里让她念出屏幕上的字,她念了四遍我才听清,是某个导航站的名称。这件事让我意识到,我在这里纠结缓存文件的二进制结构,对我妈那一类用户毫无意义——她关心的是「为什么变了」和「怎么变回去」。所以写这篇东西的时候,我一直在两个层面之间来回跳:一层是文件层面的精确,一层是使用层面的可理解。49图库免费打开49图库免费版官方下载链接95这类页面之所以有人搜,恰恰是因为后一层出了问题,而前一层的人往往看不见。这中间的断层,我暂时没有好办法。如果说有什么收获,那就是我更倾向于把「痕迹」当作提问的起点,而不是答案的终点。
还有一个细节值得写下来。6 月 6 日晚上九点二十,我在写实验笔记的时候,光标停在一句话上面删了又打、打了又删,那句话是:「用户删掉记录的动作,本身就是一种意图表达。」我最后没有把它删掉,因为我觉得它对,但也不全对。删记录可能是为了隐私,可能是为了整洁,可能是手滑,可能是帮别人清理。意图有四种以上,而缓存文件只有一种写法。把意图从文件里读出来,需要外部信息,需要上下文,需要当事人自己说。技术手段在这里的作用是提供线索,不是提供判决。我知道这话听起来像和稀泥,但我宁可和泥,也不想给一个自己都不信的确切结论。
最后说说我为什么还在写。6 月 8 日我重新数了一遍实验记录,七次实验、四个变量、十一个文件样本、三段可读文本、两条互相矛盾的时间戳。矛盾的那两个时间戳我到现在还没解释清楚:文件修改时间比它里面记录的访问时间早了四分钟。四分钟。可能是我手表的时区没调,可能是系统时间同步,可能是浏览器写入策略里有一段我不知道的延迟队列。我给一个做前端的朋友发消息问,他回了两个字:「正常。」又是这个词。我盯着屏幕看了很久,关掉对话框,去倒了第三杯咖啡。杯底那张快递单还在,我把它翻过来,背面用圆珠笔写了一行数字,看起来像密码,但我不记得是什么了。这大概就是我做这件事的全部状态:翻到很多东西,能确定的很少,愿意说出来的更少,但还是在翻。顺带把怎么重启qq浏览器、私密空间入口找不到了、qqsao123.vip浏览器打开和uc浏览器网站免费进入这几篇旧笔记重新过了一遍,有些结论需要改,有些我决定保留,因为错误本身也是记录。等我搞清楚那四分钟,我会再写一篇。