这篇笔记选的是方向三中HTTP的缓存策略问题。谷歌浏览器作为主流的浏览器之一,其缓存机制尤其值得关注。本文将详细分析Chrome浏览器中的HTTP缓存策略,包括强缓存和协商缓存。
强缓存
强缓存是指浏览器在本地存储资源,并在一定时间内直接使用这些资源而无需再次请求服务器。Chrome浏览器主要通过Expires和Cache-Control两个HTTP响应头来控制强缓存。
- Cache-Control:这是最重要的缓存控制字段,它定义了资源的缓存策略。例如,
Cache-Control: max-age=3600表示资源可以在本地缓存1小时。Cache-Control的值还包括no-cache(需要验证缓存)、no-store(不缓存内容)、public(可被所有缓存代理缓存)和private(仅浏览器可缓存)。 - Expires:这是一个HTTP/1.0的字段,指定资源过期的绝对日期。由于它依赖于客户端时间,现在大多数情况下已经被
Cache-Control取代。
当资源未过期时,Chrome会直接从缓存中读取,不会向服务器发起请求。这在Chrome控制台显示为“from cache”或“from memory cache”/“from disk cache”。
协商缓存
如果强缓存未命中,Chrome浏览器会使用协商缓存机制,通过Last-Modified和ETag两个HTTP响应头来控制。
- Last-Modified:这个字段表示资源最后被修改的时间。当资源请求时,浏览器会发送
If-Modified-Since请求头,携带上次的Last-Modified值。服务器会比较这个值和资源的当前最后修改时间,如果未改变,则返回304状态码,告诉浏览器继续使用缓存。 - ETag:这是一个资源的唯一标识符,通常由服务器生成。当资源请求时,浏览器会发送
If-None-Match请求头,携带上次的ETag值。服务器会比较这个值和资源的当前ETag,如果不一致,则返回新的资源和200状态码;如果一致,则返回304状态码。
缓存过程
浏览器缓存资源的过程可以分为以下几个步骤:
- 接收:浏览器接收HTTP请求。
- 解析:浏览器解析请求报文,提取出URL和各种首部。
- 查询:浏览器查看是否有本地副本可用,如果没有,就获取一份副本并将其保存在本地。
- 新鲜度检测:浏览器查看已缓存的副本是否够新鲜,如果不是,就询问服务器是否有任何更新。
- 创建响应:浏览器用新的首部和已缓存的主体来构建一条响应报文。
- 发送:浏览器通过网络将响应发回给客户端。
- 日志:写日志记录。
缓存控制机制
Chrome浏览器的缓存控制机制包括:
- 使用HTML Meta标签:通过HTML的
<meta>标签可以设置一些基本的缓存控制指令。 - 使用HTTP头信息控制缓存:如上所述,通过
Cache-Control、Expires、Last-Modified和ETag等HTTP头信息来控制缓存。
最后
Chrome浏览器的HTTP缓存策略通过强缓存和协商缓存两种方式,有效地减少了服务器的请求次数,加快了页面加载速度,提高了用户体验。文章到这里就结束了!检索了一些资料,可能不全面,希望对你有帮助!