HTTP的场景实践| 青训营

58 阅读2分钟

HTTP 缓存是 Web 性能优化中不可或缺的一环。合理的缓存策略可以大大提高页面的加载速度,提升用户体验。今天,我将以 Chrome 浏览器为例,对其涉及的请求中的缓存策略进行具体分析。

1. 基于强缓存的策略

强缓存是指浏览器不需要再与服务器通信,直接使用本地缓存资源。Chrome 使用以下两种 HTTP Header 来实现强缓存:

  • Expires: 一个 GMT 格式的时间戳,用于指示资源的过期时间。但由于依赖于客户端的时间,可能存在时间不同步的问题。
Expires: Wed, 22 Jul 2023 19:55:00 GMT
  • Cache-Control: 更加灵活和常用的缓存控制头。它可以设置资源的最大缓存时间(max-age),是否公共缓存(public/private)等。
Cache-Control: public, max-age=31536000

2. 协商缓存策略

当强缓存策略失效时,浏览器会与服务器进行“协商”,确定是否使用本地缓存。以下是 Chrome 使用的两组头信息进行协商:

  • Last-Modified / If-Modified-Since: 服务器返回资源时会包含 Last-Modified 标识资源的最后修改时间。在下次请求中,浏览器将发送 If-Modified-Since 来询问该时间点后资源是否有更新。

  • ETag / If-None-Match: ETag 是资源的一个唯一标识,当资源发生变动时 ETag 也会随之变化。浏览器会存储此标识,并在下次请求时发送 If-None-Match。服务器通过比较此值来决定是否返回新的资源。

3. Chrome 的缓存策略实践

在 Chrome 的开发者工具中,我们可以清晰地观察到缓存策略的运作:

  • 当一个资源被强缓存命中时,Network 面板中会显示 (from disk cache)(from memory cache),表示资源直接从硬盘或内存中读取,没有与服务器进行通信。

  • 对于协商缓存,如果资源未发生变动,服务器会返回 304 Not Modified 状态码,而资源内容则直接从浏览器缓存中读取。

4. Chrome 的缓存清除策略

Chrome 也为用户提供了灵活的缓存管理功能。用户可以通过“清除浏览数据”来选择性地清除缓存,或使用开发者工具中的“禁用缓存”选项,确保每次加载资源都来自服务器。

总结

理解并合理利用 HTTP 缓存是 Web 开发的基础,Chrome 为我们提供了直观的工具来观察和管理缓存。通过深入分析 Chrome 的缓存策略,我们不仅可以更好地优化自己的 Web 应用,同时也能够更高效地使用浏览器,享受更快的浏览速度。