使用哪一个:过期标头,上次修改的标头或ETags

2022-08-30 12:01:42

我在Apache上运行PHP,并且对如何实现服务器端缓存感到困惑,以使站点加载更快。

和标头之间有什么区别,在什么情况下应该使用哪一个?ExpiresLast-ModifiedETag


答案 1

Expires并且是“强缓存标头”Cache-Control

Last-Modified并且是“弱缓存标头”ETag

首先,浏览器进行检查以确定是否向服务器发出请求。Expires/Cache-Control

如果它必须发出请求,它将发送HTTP请求。如果文档的值与此匹配,则服务器将发送 304 代码而不是 200,并且没有内容。浏览器将从其缓存中加载内容。Last-Modified/ETagEtag

我建议使用其中一个强缓存标头,以及一个弱缓存标头。

另请参阅:


答案 2

您可以结合使用标头,但不要考虑其他两个标头。它普遍受到代理和浏览器缓存的支持。Expires

和图章之间的区别更具语义性。ETag 对客户端是不透明的。它通常是一个校验和。而上次修改的标头可以由客户端解释。据了解,上次修改的时间戳是线性工作的。ETagLast-Modified

如果浏览器请求的资源为 ,那么过去的各种时间戳都可以匹配这样的条件。如果您的页面经常更改,则上次修改时间戳可能更有利。If-Unmodified-Since

另一方面,ETag方法导致客户端为每个资源保存最后一个指纹。(我不确定浏览器缓存是否记住多个ETags)。根据请求,仅列出一个或几个可能的令牌。这可能意味着更多的失误。此外,您必须比较多个校验和,而使用上次修改时间戳,您可以进行算术比较。If-None-Match

ETags的真正优点是您可以可靠地比较指纹。上次修改时间戳有点模糊,因为它们不会验证实际页面内容是否已更改。

另请参阅:


推荐