http的场景实践 | 青训营

85 阅读2分钟

对于浏览器涉及的HTTP请求中的缓存策略,以Google Chrome为例进行具体分析。 Chrome浏览器采用了一系列缓存策略来提高网页加载速度和减轻服务器负载。以下是Chrome浏览器常用的缓存策略:

  1. 强制缓存: 当浏览器发起请求时,服务器可以通过设置响应头中的"Cache-Control"和"Expires"字段来指示浏览器是否可以使用强制缓存。如果响应头中包含了"Cache-Control"字段,并且值为"max-age"或"public",或者包含了"Expires"字段并且值比当前时间晚,浏览器就可以使用强制缓存。这样浏览器不需要再向服务器发送请求,直接从本地缓存中获取资源,加快页面加载速度。
  2. 协商缓存: 当浏览器使用强制缓存不可用时,它会发起一个带有"Cache-Control"和"ETag"或"Last-Modified"字段的请求到服务器进行协商缓存。服务器根据这些字段判断资源是否已经发生变化,如果没有变化,则返回一个状态码304(Not Modified),浏览器可以直接使用缓存副本。如果资源有变化,服务器返回新的资源,并更新缓存相关的字段。
  3. 缓存位置: Chrome浏览器将缓存分为四个位置:Memory Cache、Disk Cache、Service Worker Cache和Push Cache。
    • Memory Cache:内存缓存,被频繁访问的资源会被保存在内存中,读取速度较快。
    • Disk Cache:磁盘缓存,资源在内存缓存中没有找到时,会从磁盘缓存中查找。磁盘缓存可以持久保存,即使浏览器关闭后再次打开仍然可用。
    • Service Worker Cache:由Service Worker管理的缓存,可以离线访问,并且具有更高级的缓存控制能力。
    • Push Cache:仅用于HTTP/2的推送缓存,服务器可以主动推送资源给浏览器缓存。
  4. 缓存过期策略: Chrome浏览器使用了两种策略来判断缓存是否过期。
    • 强制校验缓存:当浏览器发起请求时,会发送一个带有"Cache-Control: no-cache"或"Pragma: no-cache"字段的请求,服务器需要验证缓存是否过期,如果未过期,则返回304状态码。
    • 隐式校验缓存:当浏览器发起请求时,会发送一个不含有任何缓存相关头字段的请求,服务器会根据资源的有效期判断是否使用缓存。 以上是Chrome浏览器常用的HTTP缓存策略,通过合理配置缓存策略可以提升网页加载速度和减轻服务器负载。