Favicon Tools检测创建
Reference

浏览器如何缓存 Favicon

浏览器对 favicon 的缓存很激进,并且把它和页面自身的缓存分开存储,往往会不顾普通刷新地把一个图标保留好几天。这就是为什么一个改过的 favicon 常常仍显示旧图像。强制刷新最可靠的办法是改变图标的 URL(通常是一个版本查询字符串,比如 /favicon.ico?v=2)再做强制刷新。

favicon 为什么这么顽固

favicon 受到特殊对待。浏览器把它们保存在一个与普通 HTTP 缓存分开的存储里,用很长的生命周期持有它们,并且不一定会在普通刷新时丢弃它们。有些还保留一个跨会话存续的、配置级的 favicon 数据库。你网站前面的 CDN 又叠加了第二层缓存。

由此带来的结果是:原地编辑图标文件常常是无形的——浏览器已经为那个 URL 存了一个图标,看不出有理由再问一次。它是按 URL 作键的,所以修复的办法是改变 URL,而不只是改变它背后的字节。

强制取到全新的 favicon

  1. 1

    改变 URL

    追加一个版本查询字符串(/favicon.ico?v=2),好让浏览器把它当作一个新资源去获取。每次改动时把数字加一。

  2. 2

    强制刷新或使用无痕窗口

    Cmd+Shift+R / Ctrl+F5,或者一个全新的无痕窗口,都能绕过浏览器存储的副本。

  3. 3

    清除任何 CDN

    如果有 CDN 挡在网站前面,就让 favicon 路径失效,好让边缘节点在浏览器看到之前就停止提供旧文件。

Favicon 缓存常见问题

为什么我的 favicon 不更新?

浏览器正在从它那个分开的 favicon 存储里提供一个缓存副本,或者一个 CDN 正在派发旧文件。用一个版本查询字符串改变图标 URL,并在无痕窗口里强制刷新。

我怎么清除 favicon 缓存?

没有可靠的按图标清除的按钮,所以改用改变 URL 的办法(/favicon.ico?v=2),它彻底绕开了缓存。实在不行,一个无痕窗口或一个不同的浏览器配置文件都没有存储的图标。

favicon 缓存在各浏览器之间有差异吗?

有。每个浏览器、往往每个配置文件,都保留自己的 favicon 存储,各有各的生命周期,这就是为什么同一时刻一个图标在一个浏览器里看起来是更新过的,在另一个里却是旧的。

相关术语