当前位置:首页 » 文件管理 » varnish缓存清除

varnish缓存清除

发布时间: 2025-06-05 23:33:47

❶ Cache-Control 的 stale-while-revalidate 指令

在HTTP缓存领域中,stale一词指的是缓存内容已经过期,如max-age设置的过期时间已届满。一旦缓存过期,客户端需要对缓存执行revalidate操作,获取最新内容。然而,在特别注重性能的场景下,这种同步更新缓存的方法被认为可能影响性能。

为了解决这个问题,2010年雅虎工程师Mark Nottingham在Cache-Control响应头中引入了两个新的扩展指令,其中stale-while-revalidate就是其中之一。此指令的含义是当执行revalidate请求时,客户端可以不等待,直接使用过期的缓存。一旦revalidate完成,缓存将更新,下次访问时即可使用最新内容。通俗来讲,stale-while-revalidate实现了“后台缓存刷新”或“异步缓存更新”的功能。

stale-while-revalidate指令的使用类似于max-age,需要指定一个秒数作为参数。例如,Cache-Control: max-age=60, stale-while-revalidate=3600表示在60秒内内容为新鲜状态,在接下来的3600秒(1小时)内,即使缓存过期,客户端仍可直接使用过期缓存,并执行异步revalidate操作。超过3600秒后,缓存完全过期,需要进行同步revalidate。

此指令最初是为了缓存服务器设计的,因此如Varnish、Squid、Nginx等软件均支持它。然而,国内CDN厂商是否支持stale-while-revalidate功能尚不确定,因为没有明确的文档提及这一点,推测支持率可能不高。而国际CDN厂商中,亚马逊不支持,Akamai的情况未知,其他一些CDN厂商支持此功能,但整体上是较为小众的特性。

在浏览器端,stale-while-revalidate指令经历了8年的空白期,直到Chrome在2018年尝试实现,最终在Chrome 75中默认启用,并被纳入fetch.spec.whatwg.org规范。随后,Firefox也在上个月实现了此功能。

使用stale-while-revalidate指令时,需要考虑到在指定的时间段内读取缓存的情况。此时除了能看到直接读取过期缓存的请求(状态码为200),还可以看到异步刷新缓存的请求(状态码为304)。Chrome DevTools可以看到这两种请求,而Firefox DevTools目前仅能查看直接读取缓存的请求。

值得注意的是,在stale-while-revalidate指定的时间段结束后,过期的缓存不再被视为过期缓存,而是开启一个新的生命周期。stale-while-revalidate设定的时间段并不是一定完全经历,可能会有所偏差。

stale-while-revalidate在CDN上的应用并不广泛,但在浏览器端,它在某些场景下可能有用。例如,当静态资源的发布是非覆盖式的,即每次发布新版本都会改变URL中的版本号或哈希值,此时资源的缓存时间会设置得非常长,如一年、三年甚至十年。在这种情况下,stale-while-revalidate通常没有实际用途,因为它在到期前就已经不再在线上使用。

然而,存在一些场景需要使用stale-while-revalidate,如网站首页或无法更改URL的情况。例如淘宝首页是一个可缓存的静态页面,或某些需要与第三方共享的URL。在这些情况下,stale-while-revalidate可以发挥作用。

stale-while-revalidate旨在以牺牲内容的新鲜性换取加载速度的提升,但是否使用以及使用多大数值取决于具体场景。通常情况下,倾向于使用max-age较短而stale-while-revalidate较长的策略。甚至在极端情况下,如Cache-Control: max-age=0, stale-while-revalidate=36000000,也有可能找到应用场景。

另一个需要考虑的是,must-revalidate指令可以屏蔽stale-while-revalidate的使用,以确保始终获取最新内容。然而,直接删除stale-while-revalidate指令可能是更好的选择,因为must-revalidate并不应该被使用。

如果您在特定场景中能够应用stale-while-revalidate功能,并且已经在CDN上使用了它,不妨在下方留言分享您的经验。

热点内容
在c语言中函数名的存储类别为外部 发布:2025-06-07 00:50:38 浏览:586
安卓系统如何下载游戏不要钱 发布:2025-06-07 00:29:08 浏览:793
我的世界基岩版java互通的服务器 发布:2025-06-07 00:26:32 浏览:282
基于角色的访问控制 发布:2025-06-07 00:21:32 浏览:968
如何配置交换机安全 发布:2025-06-07 00:01:41 浏览:1000
怎么连接电脑电脑的密码在哪里 发布:2025-06-07 00:01:40 浏览:246
云主机访问 发布:2025-06-06 23:51:20 浏览:683
打开电脑文件夹就死机 发布:2025-06-06 23:51:15 浏览:452
传奇服务器7000端口怎么修改 发布:2025-06-06 23:28:21 浏览:49
阿里云云服务器ip和密码 发布:2025-06-06 23:28:08 浏览:640