本文共 1313 字,大约阅读时间需要 4 分钟。
在HTTP协议中,客户端缓存是优化用户体验的重要手段。通过合理设置缓存策略,服务端可以控制客户端何时访问服务器,减少不必要的数据传输。这一机制从根本上提升了网站的性能表现。
静态资源(如图片、CSS、JavaScript)通常不会频繁更新。将这些资源存储在客户端缓存中,可以显著提升用户体验。缓存的核心作用在于减少对服务器的请求次数,从而降低加载时间。
HTTP头字段中,Expires 和 Cache-Control 是实现客户端缓存的关键工具。
Expires:指定资源的绝对过期时间。例如,Expires: Sun, 16 Oct 2016 05:43:02 GMT 表示资源在该时间后无效。
Cache-Control:定义缓存策略。常见值包括:
max-age:设置资源的相对过期时间(如 Cache-Control: max-age: 600 表示10分钟)。no-cache:禁止客户端缓存资源。no-store:禁止客户端存储资源副本。must-revalidate:强制客户端每次请求都重新验证缓存。当服务器返回这两个头字段时,浏览器会根据设定存储资源,并在规定时间后重新请求。
为了检测资源是否有更新,服务端可以使用 Last-Modified 和 If-Modify-Since。
Last-Modified:记录资源的最后修改时间(如 Last-Modified: Wed, 07 Aug 2013 15:32:18 GMT)。
If-Modify-Since:客户端在下一次请求时携带该头字段,询问服务器资源是否有更新。
当资源未修改,服务器返回 304 Not Modified,客户端直接使用缓存内容。
ETag 是一种精确的资源标识符,用于验证资源是否有更新。
ETag:例如 ETag: "1234",表示资源的唯一标识。
If-None-Match:客户端携带资源的 ETag 值,询问服务器是否有更新。若未修改,返回 304。
ETag 的精确性使其在资源频繁更新时特别有用。
浏览器提供多种刷新方式:
地址栏输入回车:直接从缓存中加载资源,无需与服务器通信。
F5 或 Ctrl+F5:强制刷新,浏览器会发送 If-Modify-Since 请求,获取最新缓存标志。
Ctrl+F5:强制清除缓存,重新下载完整资源。
Cache-Control:优先于 Expires 有效,若冲突,取 Cache-Control 的值。
条件请求:通过 If-None-Match 和 If-Modify-Since 实现,只有在资源有更新时才下载新内容。
ETag:尽管有效,但计算和存储需要资源,通常用于精确控制。
通过合理配置这些头字段和刷新机制,开发者可以优化客户端缓存行为,提升网站性能和用户体验。
转载地址:http://tuhfk.baihongyu.com/