【发布时间】:2011-07-16 08:46:15
【问题描述】:
我在 Apache 上运行 PHP,对如何实现服务器端缓存以使网站加载更快感到困惑。
Expires、Last-Modified 和ETag 标头有什么区别,在什么情况下应该使用哪一个?
【问题讨论】:
标签: php apache2 etag last-modified mod-expires
我在 Apache 上运行 PHP,对如何实现服务器端缓存以使网站加载更快感到困惑。
Expires、Last-Modified 和ETag 标头有什么区别,在什么情况下应该使用哪一个?
【问题讨论】:
标签: php apache2 etag last-modified mod-expires
Expires 和 Cache-Control 是“强缓存标头”
Last-Modified 和 ETag 是“弱缓存标头”
首先,浏览器检查Expires/Cache-Control,以确定是否向服务器发出请求。
如果它必须发出请求,它将在 HTTP 请求中发送Last-Modified/ETag。如果文档的 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 时间戳有点模糊,因为它们不验证实际页面内容是否更改。
另见:
【讨论】: