HTTP的场景实践| 豆包MarsCode AI刷题

43 阅读2分钟

以Chrome浏览器为例来分析缓存策略。

缓存类型

  • 强缓存:Chrome首先会判断是否命中强缓存。它是通过检查响应头中的 Cache - Control 和 Expires 字段来实现的。 Cache - Control 是更常用的一个字段,例如其值为 max - age = 3600 ,表示资源在1个小时(3600秒)内可以直接从缓存中获取,无需向服务器发送请求。 Expires 是一个比较老的字段,它是一个绝对时间,如 Expires: Wed, 21 Oct 2024 07:28:00 GMT ,在此时间之前浏览器会使用缓存。如果这两个字段同时存在, Cache - Control 优先级更高。
  • 协商缓存:当强缓存没有命中时,Chrome会尝试协商缓存。它会向服务器发送一个条件请求,这个请求头会带有 If - Modified - Since 或者 If - None - Match 字段。服务器会根据这些请求头信息来判断资源是否发生变化。例如, If - Modified - Since 的值是上次请求资源的最后修改时间。如果服务器端的资源没有修改,就会返回304状态码,告诉浏览器可以继续使用缓存中的资源;如果资源已经修改,则返回200状态码和新的资源内容。

缓存的更新策略

  • 自动更新:对于一些配置了较短缓存时间的资源,如 Cache - Control: max - age = 60 (1分钟)的脚本文件,Chrome会在缓存过期后自动重新请求更新后的资源。
  • 手动更新:用户可以通过刷新页面(普通刷新和强制刷新)来更新缓存。普通刷新(F5)时,浏览器会优先使用缓存,对于过期的资源会发送条件请求进行验证;而强制刷新(Ctrl + F5)会直接绕过缓存,向服务器请求最新的资源。

对不同类型资源的缓存策略

  • HTML文件:通常不会缓存很长时间,因为HTML内容的更新可能比较频繁。可能会配置较短的 max - age 值或者设置 no - cache ,这样每次加载页面时浏览器都会检查服务器上的HTML文件是否更新。
  • CSS和JavaScript文件:如果这些文件版本化管理较好,即文件名中带有版本号等唯一标识,如 style - v1.1.css ,可以设置较长的缓存时间。这样在文件没有更新的情况下浏览器可以直接使用缓存,减少服务器压力和加载时间。
  • 图片资源:对于不经常变化的图片,如网站的logo等,可以设置较长的缓存时间,通过强缓存让浏览器直接使用本地缓存的图片,提升页面加载速度。