我最近写了这个答案,其中我解释了HSTS预加载的过程。但是,我注意到我实际上并不知道获取预加载信息的确切机制是否有效。我查看了Chromium 文档、MDN Web Docs、hstspreload.org等,但它们都只解释了预加载的目的,而不是技术细节。
因此,我想出了两种可能的工作方式:
- 浏览器会定期下载完整的预加载列表——这将非常浪费,具体取决于预加载列表的大小。鉴于每天大约有 100 万个域被注册,这个列表将持续增长并且变得无法维护,特别是考虑到绝大多数网站不会被每个用户访问的事实。
- 浏览器即席查询 HSTS 状态- 这将是一种更简单的方法。如果浏览器想要转到
example.com,并且没有可用的 HSTS 信息,则将查询预加载列表是否为该站点启用了 HSTS 预加载。这将有几个缺点,因为预加载列表现在的流量非常大,并且还会对每个用户产生隐私影响。
所以我现在的问题是:它是如何实际实施的?是否以任何方式减轻了不利因素?
一些文档指出有一个列表,它与浏览器一起分发。这个 Chromium 列表可以在这里看到,它包括很多高知名度的域,如 Twitter、PayPal 等......
但是,我有理由相信这个列表不是“完整”的预加载列表。首先,该列表仅包含 500 多个非 Google 域,看起来相当少。其次,根据 hstspreload.org 的说法,该域mechmk1.me 目前是预加载的,并且已经有好几年了。但是,与 Chromium 一起分发的列表中没有此条目。
因此,我相信 Chromium 实际上有两个列表:一个与浏览器一起提供,包含最“重要”的域,另一个用于不太重要的域(提交到 hstspreload.org 的任何内容,但不存在在该列表中)。
我的问题是关于后一个列表,即不是与浏览器一起分发的列表。