使用哪一个:Expire Header,Last Modified Header或ETags

时间:2011-03-16 06:43:07

标签: php apache2 etag last-modified mod-expires

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

ExpiresLast-ModifiedETag标题之间有什么区别?在哪种情况下应该使用哪个标题?

2 个答案:

答案 0 :(得分:38)

ExpiresCache-Control是“强大的缓存标题”

Last-ModifiedETag是“弱缓存标题”

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

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

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

答案 1 :(得分:22)

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

ETagLast-Modified标记之间的区别更具语义性。 ETag对客户来说是不透明的。它通常是校验和。客户端可以解释Last-Modified标头。据了解,上次修改的时间戳是线性的。

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

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

ETags的真正优势在于您可以可靠地比较指纹。 Last-Modified时间戳稍微模糊一些,因为它们不会验证实际页面内容是否发生了变化。

另见: