使用哪一个:过期标头,上次修改的标头或ETags
2022-08-30 12:01:42
我在Apache上运行PHP,并且对如何实现服务器端缓存感到困惑,以使站点加载更快。
和标头之间有什么区别,在什么情况下应该使用哪一个?Expires
Last-Modified
ETag
我在Apache上运行PHP,并且对如何实现服务器端缓存感到困惑,以使站点加载更快。
和标头之间有什么区别,在什么情况下应该使用哪一个?Expires
Last-Modified
ETag
Expires
并且是“强缓存标头”Cache-Control
Last-Modified
并且是“弱缓存标头”ETag
首先,浏览器进行检查以确定是否向服务器发出请求。Expires/Cache-Control
如果它必须发出请求,它将发送HTTP请求。如果文档的值与此匹配,则服务器将发送 304 代码而不是 200,并且没有内容。浏览器将从其缓存中加载内容。Last-Modified/ETag
Etag
我建议使用其中一个强缓存标头,以及一个弱缓存标头。
另请参阅:
您可以结合使用标头,但不要考虑其他两个标头。它普遍受到代理和浏览器缓存的支持。Expires
和图章之间的区别更具语义性。ETag 对客户端是不透明的。它通常是一个校验和。而上次修改的标头可以由客户端解释。据了解,上次修改的时间戳是线性工作的。ETag
Last-Modified
如果浏览器请求的资源为 ,那么过去的各种时间戳都可以匹配这样的条件。如果您的页面经常更改,则上次修改时间戳可能更有利。If-Unmodified-Since
另一方面,ETag方法导致客户端为每个资源保存最后一个指纹。(我不确定浏览器缓存是否记住多个ETags)。根据请求,仅列出一个或几个可能的令牌。这可能意味着更多的失误。此外,您必须比较多个校验和,而使用上次修改时间戳,您可以进行算术比较。If-None-Match
ETags的真正优点是您可以可靠地比较指纹。上次修改时间戳有点模糊,因为它们不会验证实际页面内容是否已更改。
另请参阅: