通过HTTP头信息控制缓存是优化Web性能的重要手段,主要涉及到两个关键的HTTP头字段:Cache-Control
和Expires
,以及其他一些辅助性的头字段,比如ETag
和Last-Modified
用于实现对比缓存。下面是控制缓存的几种常见方式:
Cache-Control
头Cache-Control
是一个通用且强大的指令集,用于指定缓存策略。它支持多种指令,包括但不限于:
Cache-Control: max-age=3600
表示资源可以被缓存1小时。Expires
头Expires
头字段指定了一个绝对日期和时间,在此时间之前,响应被认为是新鲜的,不需要重新验证。例如,Expires: Fri, 31 Aug 2018 07:40:04 GMT
。然而,Cache-Control
中的max-age
指令优先级更高,通常推荐使用max-age
而不是Expires
,因为前者更精确且不受客户端时钟偏差影响。
对比缓存利用ETag
(实体标签)或Last-Modified
来验证已缓存的响应是否仍然有效。工作流程如下:
ETag: "123456789"
。浏览器下次请求时,会带上If-None-Match
头,包含之前的ETag值,服务器比较后决定是否返回新的内容。Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT
。浏览器下次请求时,会带上If-Modified-Since
头,如果资源未被修改,则服务器返回一个304 Not Modified响应,告知浏览器使用缓存。为了有效地控制缓存,开发者通常会结合使用这些头字段,比如设置Cache-Control
来定义缓存策略,并利用ETag
或Last-Modified
来实施高效的资源验证,确保用户能够快速访问到最新或已经缓存的内容,同时减轻服务器负担。