40

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

Expires,Last-Modified和标头有什么区别ETag,在什么情况下应该使用哪一个?

4

2 回答 2

57

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

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

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

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

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

也可以看看:

于 2014-03-05T04:26:46.620 回答
31

您可以Expires结合使用标题,但不管其他两个。代理和浏览器缓存普遍支持它。

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

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

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

ETags 的真正优势在于您可以可靠地比较指纹。Last-Modified 时间戳有点模糊,因为它们不验证实际页面内容是否更改。

也可以看看:

于 2011-03-16T06:58:04.213 回答