我只是想了解一下我为我的SSR页面指定的头部:public,s-maxage = 3600,stale-while-revalidate = 59
。
请注意,我的stale-while-revalidate
值为59秒,远小于s-maxage
值为1小时。 我想知道当stale-while-revalidate
值小于s-maxage
时,会发生什么情况? stale-while-revalidate
头部会被忽略吗?
我只是想了解一下我为我的SSR页面指定的头部:public,s-maxage = 3600,stale-while-revalidate = 59
。
请注意,我的stale-while-revalidate
值为59秒,远小于s-maxage
值为1小时。 我想知道当stale-while-revalidate
值小于s-maxage
时,会发生什么情况? stale-while-revalidate
头部会被忽略吗?
Cache-Control
头设置为s-maxage=3600, stale-while-revalidate=59
意味着两件事:
s-maxage=3600
);stale-while-revalidate=59
),同时服务器会在后台进行重新验证操作。stale-while-revalidate
并不会被忽略,它确定了页面的maxage
过期后,在重新验证操作发生的额外时间窗口。0到3600秒 | 3601到3660秒 | 3660秒后 |
---|---|---|
缓存的页面是新的且用于提供页面服务。无需重新验证。 | 缓存的页面是陈旧的,但仍用于提供页面服务。重新验证将在后台进行以填充缓存。 | 缓存的页面是陈旧的且不再使用。需要新请求以提供页面服务并填充缓存。 |
通常,服务器会希望将
max-age
和stale-while-revalidate
的组合设置为它们能够容忍的最长总潜在新鲜度寿命。例如,如果将两者都设置为600,则服务器必须能够容忍从缓存中提供响应长达20分钟。由于异步验证只会在响应变得陈旧,但在
stale-while-revalidate
窗口结束之前发生请求时才会发生,因此该窗口的大小和其中发生请求的可能性决定了所有请求无延迟提供响应的可能性有多大。如果该窗口太小或者流量过低,则一些请求将落在该窗口之外并阻塞,直到服务器可以验证缓存的响应。