一篇文章带你整明白HTTP缓存知识

最近看了很多关于缓存的文章, 每次看完,看似明白但是实际还是没明白,这次总算搞明白协商缓存是怎么回事了

 

首先,服务器缓存分强制缓存和协商缓存(也叫对比缓存)

 

强制缓存一般是服务端在请求头携带字段Expires 来指定过期时间,不过这个字段已经是HTTP1的字段了(也可以使用);

强制缓存还有一个字段是Cache-Control : 这个字段主要值有 no-store no-cache max-age等来设置强制缓存(max-age来设置资源的过期时间)

 

下面重点需要搞明白的是协商缓存,也就是对比缓存

① 协商缓存发生在强制缓存失效之后,浏览器根据缓存标识决定是否使用缓存的过程

②协商缓存发生的过程如下:

 1. 通过  Last-Modified值,和If-Modify-Since字段 判断是否要缓存

     -浏览器第一次请求    这时候不会携带缓存标识

     -服务器第一次返回    这个时候服务端设置响应头  Last-Modified , 值为最后一次修改时间

     -浏览器第一次接收到响应   接收到服务器设置的响应头  响应体等

     - 浏览器第二次请求  这个时候浏览器会先检测到Last-Modified 字段,于是发送请求的时候携带If-Modified-Since 请求头,值就是浏览器第一次返回回来的Last-Modified的值;

     -服务器第二次接受到请求  这个时候会对比这个值和服务器中这个资源修改时间;如果没有变化则直接返回携带304的响应头和空的响应体,浏览器则直接读取缓存,如果不等(小于服务器上的这个修改时间),说明文件有更新,返回新的资源

     -这样缓存目的就达到了

   2. 通过浏览器携带的If-None-Match字段和Etag 值判断是否需要缓存

     -浏览器第一次请求  这个时候请求头不会携带缓存标识

     -服务器第一次响应  这个时候响应头携带Etag字段,值为改资源文件唯一标识(这个值生成有一定规则 掘金有文章写的是last_modified 与 content_length组成

    - 浏览器第二次发起请求  这个时候浏览器请求头携带If-None-Match字段,值为Etag的值

    - 服务器接受到这个请求字段之后,把If-None-Match的值和这个资源的Etag值进行比较,如果不同,则会返回完整的报文信息;如果一致,则只返回带304的响应头,浏览器在缓存中读取缓存的资源

  

 

搞明白的方法还是自己笔和纸画出来的,嗯 ,加油;💪

 

posted @ 2020-08-05 00:15  大桥默默学  阅读(183)  评论(0编辑  收藏  举报