缓存是提升页面性能的一项重要技术,而HTTP
缓存技术在我们日常使用浏览器时被广泛应用。
HTTP缓存分为两种类型
- 强缓存
- 协商缓存
下面主要解释下这两种缓存是如何实现的
- 场景解释两种概念
强缓存:场景:在浏览器访问某个页面时,(可以认为浏览器发送网络请求前都会去内存中查找缓存)在浏览器缓存中命中了某个缓存,判断缓存是否有效,如果有效会直接将缓存内容作为网络请求的返回结果,且标注状态码为200 (from cache) 。
协商缓存:在浏览器读缓存时,发现缓存过期,就发送一个请求到后端去访问资源,结果后端发现这个资源未发生修改,于是返回304状态的报文,告诉浏览器这个过期的缓存还可以继续使用。 - 如何判断缓存有效呢
这里存在两个效果类似的字段:cache-control & Expires。-
cache-control: HTTP1.1 标准,标注浏览器以何种方式对数据进行缓存,主要关注max-age 这个设置,这个设置的值是一个相对值(就是一个保质期),这个相对值相对于用户首次拿到这个数据的时间。
315360000s = 10 years
百度图标 - Expires:HTTP1.0标准(新标准的优先级大于旧标准,所以同时有Cache-Control 和 Expires时,优先遵循Cache-Control 标准),标注的是一个绝对值,即有效日期(生产日期 + 保质期)
-
- 如果发现缓存已经失效了呢?
浏览器会去服务器再去请求资源- 如果服务器使用cache-control , 则请求失效缓存时,Request Headers要携带If-Modified-Since这个字段(等同于Last-Modified),去后端请求,当后端资源未修改时,即后端的Last-Modified字段未修改,就返回一个304报文给客户端浏览器,让浏览器继续使用这个数据,这就实现了协商缓存。
- 如果服务器使用Expires,Request Headers 就要携带If-None-Match字段(等同于Etag,服务器对资源进行hash加密之后得出的字符串),去后端请求,后续处理同1 。
网友评论