一 如何通过HTTP头信息控制缓存?

通过HTTP头信息控制缓存是优化Web性能的重要手段,主要涉及到两个关键的HTTP头字段:Cache-ControlExpires,以及其他一些辅助性的头字段,比如ETagLast-Modified用于实现对比缓存。下面是控制缓存的几种常见方式:

1.1 使用 Cache-Control

Cache-Control是一个通用且强大的指令集,用于指定缓存策略。它支持多种指令,包括但不限于:

  • public: 指示响应可以被任何缓存(包括共享缓存)缓存。
  • private: 表示响应只能被私有缓存(通常是用户的浏览器缓存)缓存,不能被代理服务器等共享缓存缓存。
  • no-cache: 不是说不缓存,而是要求缓存必须在使用前验证其新鲜度(通过发出条件请求)。
  • no-store: 禁止任何缓存,指示不应存储有关请求或响应的任何信息。
  • max-age=: 设置缓存的最大生命周期,单位为秒。例如,Cache-Control: max-age=3600表示资源可以被缓存1小时。

1.2 使用 Expires

Expires头字段指定了一个绝对日期和时间,在此时间之前,响应被认为是新鲜的,不需要重新验证。例如,Expires: Fri, 31 Aug 2018 07:40:04 GMT。然而,Cache-Control中的max-age指令优先级更高,通常推荐使用max-age而不是Expires,因为前者更精确且不受客户端时钟偏差影响。

1.3 对比缓存

对比缓存利用ETag(实体标签)或Last-Modified来验证已缓存的响应是否仍然有效。工作流程如下:

  • ETag: 服务器在响应中提供一个唯一标识资源的标签,如ETag: "123456789"。浏览器下次请求时,会带上If-None-Match头,包含之前的ETag值,服务器比较后决定是否返回新的内容。
  • Last-Modified: 服务器提供资源最后修改的时间,如Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT。浏览器下次请求时,会带上If-Modified-Since头,如果资源未被修改,则服务器返回一个304 Not Modified响应,告知浏览器使用缓存。

1.4 综合应用

为了有效地控制缓存,开发者通常会结合使用这些头字段,比如设置Cache-Control来定义缓存策略,并利用ETagLast-Modified来实施高效的资源验证,确保用户能够快速访问到最新或已经缓存的内容,同时减轻服务器负担。