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