
Cross-Origin Storage API 在 Transformers.js 中的试验

浏览器缓存被严格隔离之后,跑 Transformers.js 遇到一个严重的浪费:从不同源访问同一个 AI 模型或 Wasm 运行时,哪怕资源字节完全相同,也得重新下载并占用双份 177 MB 存储空间。根源是浏览器为了防时序攻击,给缓存加上了 Network Isolation Key,不同来源的请求无法命中相同的缓存条目。对于重度依赖大模型的 Web 应用来说,每次切换域名就要多花几秒钟和几百兆流量,体验灾难。
Cross-Origin Storage API 的解法很干脆:不再用 URL 作为缓存标识,而是用 SHA-256 哈希值。资源下载后,开发者通过 navigator.crossOriginStorage 接口按哈希存储,其他任意站再请求同一个哈希值就能直接命中缓存。写入时浏览器会严格验证哈希匹配,保证了完整性。控制权限方面,origins: '*' 让文件全网可见,适合模型权重和 Wasm 运行时这种公共资源;也可以限制到指定域名,保护私有模型。因为只认哈希不认来源,同一个文件在 https://googlechrome.github.io 和 https://rawcdn.rawgit.net 之间可以无缝共享。
作为技术人,我觉得这个设计真正聪明的地方是把“安全”和“效率”的矛盾踢给了加密哈希,而不是靠妥协权限来解决。之前各家做 P2P 模型分发、跨站缓存方案都很痛苦,就是因为天然缺少一个不与来源绑定的标识符。COS 能走通的关键在于:它让浏览器不再“信任”URL,而是“信任”内容本身。对 Transformers.js 这类前端 AI 框架来说,后续所有模型和运行时只需网络传输一次,往后所有站点都能瞬间命中。这个思路一旦原生落地,会大幅降低 Web AI 应用的进入门槛——用户不会再因为换了个域名就得重新灌 170 MB 数据。


