浏览器缓存策略主要是用于提高网页加载速度,减少服务器压力以及节省带宽。以下是几种主要的浏览器缓存策略:
-
强缓存(Strong Cache)
Expires
:这是HTTP/1.0中使用的头信息,用来指定资源到期的时间。如果请求的时间小于Expires的时间,浏览器会直接使用缓存中的资源,而不会向服务器发起请求。Cache-Control
:在HTTP/1.1中引入,比Expires更灵活。常用的指令包括max-age
(资源最大有效时间)、no-cache
(每次都要向服务器确认)、no-store
(完全不缓存),等等。若设置了max-age
,且缓存时间未过期,则浏览器会直接使用本地缓存。
-
协商缓存(Negotiation Cache)
Last-Modified
和If-Modified-Since
:服务器在响应中加入Last-Modified
标头指明资源最后修改时间,浏览器再请求时通过If-Modified-Since
将这个值发送给服务器,由服务器判断资源是否有更新。ETag
和If-None-Match
:ETag是资源的唯一标识符,当资源有变动时ETag也会变。浏览器存储资源的ETag,并在下次请求时通过If-None-Match
发送给服务器,以检查资源是否有更新。
若在协商缓存中服务器确认内容没有更新,则服务器会返回304状态码,浏览器就会使用本地缓存;如果内容更新了,则会返回200状态码和新的资源内容。
-
预缓存(Pre-Caching)
- Service Workers:通过Service Workers可以拦截网络请求,并动态地缓存或者恢复资源。这允许创建有效的离线体验,并且可以精细控制缓存策略。
-
内存和硬盘缓存 浏览器通常将资源缓存在内存或硬盘中:
- 内存缓存:缓存存储在内存中,访问速度快,但只在浏览器会话期间有效。
- 硬盘缓存:缓存存储在硬盘上,访问速度慢一些,但即使关闭浏览器后依然可以使用。
举个例子,假设您访问了一个前端的网站,网站的CSS文件设置了强缓存,Cache-Control
设置为max-age=3600
,这意味着在接下来的一个小时内,如果您再次访问该网站,浏览器就会直接使用本地缓存的CSS文件,而不需要再次请求服务器,这样就能加快页面的加载速度。
而对于网站的新闻部分,可能会使用协商缓存,每次访问时通过ETag或者Last-Modified信息检查内容是否有更新,以确保用户总是看到最新的内容,同时在内容没有更新的情况下减少不必要的资源传输。