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