00:00
嗨,同学们,我们现在呢,把这个缓存给关闭掉了,就是协商缓存关闭掉了,那么接下来呢,我们试着去开启一下它这个强制缓存,也就是不不像这个服务器端去发请求这种缓存,那么这会儿呢,有两个可以去配置,一个是这个control。还有一个这个express啊,就是它整个这个页面的过去之间,还有它的这个,呃,对于这个开始CTRL,这是两个标签啊,跟这个我们浏览器的版本有关系,那在这儿呢,我们先试先试一下express express比较简单,他直接给我们发送一个过期时间过来。呃,这express呢,后边可以跟着这个时间的单位呢,可以是秒,可以是分钟,也可以是几个小时或者多少天,如果你这东西压根就不可能发生变化,比如说像呃,我们收藏夹里边的这个这个图标啊,或者是你的一些这个logo基本不变,那可以把这个时间设的。超长,比如半年一年都可以啊。那要想要开启它的话呢,也是比较简单的,在这呢,有这个express。
01:06
直接加上这这一句就可以了,300S就300秒,300H就300小时。来,我们先来一个300S,我们看一下这会发生啥变化。然后配完之后。还得重启。然后呢,在这儿再打开一个标签吧,这样比较容易对比。走。呃,你看这response啊,这里边已经有这个拉莫了,这好像它用缓存了啊,重新清了,然后再访问一下。你看这就不一样了,这里边有这个express了啊,之前的这个请求里边呢,呃,不是之前这个response里是没有这个express的,这是我们刚刚配的对不对,有一个300秒,这是自我下载下来之后,300秒是有效的啊,所以这里边会有一个时间啊,那如果你的系统时间如果变了,那这会儿可能就不准了。
02:01
啊,这是express,有了express之后,你看我们再刷新。这第一次是1.8K对吧。诶,这第二次还是1.8K。嗯,然后再看。再说。呃,在这儿呢,我们可以看到啊,不管怎么刷新,它都还是带这个size,它去发送请求了,对不对,这是为什么呢?这主要就是因为这个浏览器的一些策略,你遇到这种事儿的时候千万不要慌。只有一个express,现在是express呢,算是比较老的这么一个header了,在he1.1的时候,呃和之后啊,它不再用这个express了,而是用这个control。但在这个浏览器,不同的浏览器在识别这个它想投的时候,处理方式是不一样的,在这这个Chrome,或者说我这个版本的Chrome,它是这样的,你的电脑可能就不这样,那这个一般来说啊,它只针对于首次访问啊,或者是你新开标签首次访问,只要你刷新了就不行了,你看。
03:09
这样我们贴到这个一个新的标签里走。看见了吗?这会儿他就从我们的这个本机的缓存里边去读了,但是你要刷新了。你怎么刷新都不好使,就这份缓存。只有在你这个首次访问的,也不叫首次访访问啊,新开标签打开的时候,它会使用这份缓存,这是浏览器的这个策略,它使不使用这份缓存完全取决于浏览器,这是我们现在呢,只配了一个这个express啊。在HTp1.1之后呢,还有一个比他优先级更高的叫c control,我们可以再配一个c control,我们再看一下。这个express啊和开始CRL呢,这两个啊,其实可以配合使用的,我们先注掉这个express啊呃,然后接下来呢,去手动配置一下这个开始CTR,然后在这儿我们去添加一个新的header。
04:06
ADD header,这个header呢,就是这个开始C。这个catch control吧,它可以配置的东西比较多,大家可以看一下public private no catch啊,这里边比较有用的呢,或者比较常用的就是这个no cat和noto啊,就是压根儿这如果你有这两个呢,基本的就是。呃,这个一个是用本地缓存去发送验证,另外一个呢,就是直接禁用缓存,Not do是压根就不存no catch呢是不直接去使用。啊,然后还有一个就是这个max,如果你用的这max edge,其实它的主要的效果就跟我们刚刚配的这个就很像了,那是过期时间,这是呃最大的有效时间,也就是文件在浏览器当中可以缓存的。这个时间是多少?
05:01
我们可以在这配这个,呃,先配一个这个max age,我们看一下。呃,我们在这个后边呢,加上这个,呃,Max age。杠A。然后给他个时间,比如说呃,这个也是300秒,就300。然后保存,然后重启。嗯,写错了吗?哦,少一分号啊。再重启。那接下来我们再刷新一下看看。CTRL在这儿了啊,这就有这开始CRL了,然后再接下来我们再刷新看看。诶,他还是读的这个这个这个这个。本机磁盘的这个文件对不对。哎,不是他他还是发起了,发起了新的请求,对吧,他现在是200,然后接下来我们再看。
06:07
这样。哎,他就from death了。所以说这个只是配了一个CCTRL,基本上它还是会在,呃,我们直接访问的时候呢,会用缓存,当你刷新的时候。啊,他会去请求一下对吧,明显的这是呃浏览器的一些行为,那比如说我用户我就想刷新一下这个页面,你还直接去给我缓存,从缓存里边去拉数据,这样是不是就是浏览器做的这个功能就有点儿违背了用户的需求了,对吧?用户的需求就是我想刷新一下页面嘛,比如说我现在看看这个淘宝。呃,想秒杀一个东西,他马上就要开始了,那我在这刷新,虽然说我用了这个缓存,对吧,那用户是想要看看他这个,呃,现在有没有到这个时间的,那你在这刷新了,它还用缓存,这明显就是不合理的,所以用了这个express加上这个开始controlt,这个它的生效呢,主要也就是在我们访问的时候不刷新啊,或者或者说这个点击连接就直接点击连接啊,没有这个刷新动作,这个刷新动作的处理是浏览器这个处理的,究竟发不发请求也是浏览器决定的。
07:16
啊,所以这是这两个呢,就属于这种强制性的缓存,这两两种强制性的缓存可以让我们。系统的强制的在客户端的去,呃,这个。把数据缓存进去,并且嗯这个不发送请求的情况下呢,就可以把这个呃数据直接给展示出来啊,然后这个呃主要针对的还是呃,他没点这个刷新按钮it price呢是比较老的这个协议头。Control呢,它的它的这个优先级要远远高于这个express啊,所以如果你这俩都配了,你要注意啊,这CTRL它的优先级比较高啊,这就是这个。它的,嗯,这个缓存缓存的配置,然后另外两个呢,就是这个。
08:05
ET和这个,呃和这个这个这个last modified,这last modified呢,基本上我们不会去手动去改它,你改了之后这文件不就不对了吗?你也不可能把每一个这个文件它的拉斯莫范全都改成一样的吧,对吧,这样也是有一点。呃,不太合理的,因为我们配置的呢,只是针对一个location,或者针对一个呃,其他的其他的location的一个,呃一一个匹配它如果匹配上了之后,它会返回相同的这个拉莫范,那这明显是不合适的,对吧,所以一般来说我们也不会去手动去配置这莫范,然后1T呢。呃,它的这个计算规则,刚刚我们家说了啊,它是通过一个文件的哈希算法得出的结果,实际上它真正的这个计算啊,也是和这个拉斯莫范。啊,有关系的。呃,这个一他的真正的计算啊,它是靠last modify和这个文件的大小两个相连,这也就是为啥我们看见的这个。
09:07
呃,他给我返回的这个1TAG,它中间有一个横线,你看见了吧。它是,呃。时间和这个我忘了前后顺序啊,一个是时间,一个是文件大小,两个呢转成16进制,然后取其中的一段数字,呃,取其中一段值,然后计算出来这个结果就针对于当前文件名,再加上这个文件大小,再加上时间这三个因子,就可以基本确定一个文件它有没有被动过了啊,这1T呢,这种一的生成啊,这个算法基本上我们也也没有必要改。因为你改了之后,呃,有很多时候这个呃,集群当中如果有其他机器,如果要是发生了这个这个这个变化的话,你这你这边有变化,别的机器没有变化。嗯。那这个在最终传递这1T的时候呢,它可能会造成不匹配,它匹配不上了,这缓存就对不上嘛,如果你就不想让它对上的话,那你其实就可以直接把它给关掉嘛。
10:08
这就是这个客户端的缓存啊呃,1T呢和这个拉莫five这基本上没啥可配的,然后这个卡controlt呢,我们和这个,呃,这个这个。呃,Express啊,可以配合这个一和这个呃,这个这个last我们一块去使用,也就是说最终的结论呢,我们可以看到用户在首次访问这个当前的页面的时候,我们就可以让他从磁盘去加载这份数据,而完全没有必要向我们去发请求啊,就是这样。这种情况。它从磁盘呢,呃,这这个吧。我们再给大家看一下啊。就是在首次请求他打开这个地址,打开这个连接的时候呢,直接从磁盘里边拉出来啊,然后然后这个呃,在配合着这个呃,这个这个这个拉莫范和这1TAG1起来使用啊。
11:10
当用户强制要刷新的时候。这会儿就进入了这个1T的逻辑了,如果文件没发生变化,虽然说请求打到服务器了,服务器呢,也不会给你这个,呃,把这个这个这个数据,呃。啊不是啊,这这怎么说呢,就是用户在刷新的时候,虽然说用户有刷新的操作请求呢,打过去他会带着这个拉。啊和或者这带着这个1T或者两个同时带着,当服务器接到这个头信息的时候呢,会去和本机的这个文件去比对一下,如果比对上了没有问题,那么接下来。如果你不关1T的话,呃,不或这个,或者不关这个,呃,一幅modify science,它就不会再去发送数据给他了,而是直接发送一个304 304这个304这个状态码,然后让浏览器自行去从自己的这个本机的缓存里边去加载上来,所以这两个配合来使用,首次打开和页面刷新这两个呢,都可以去使用缓存了,你只是有一个express页面在刷新的时候,它还会去发送请求把数据给拉回来的。
12:19
给大家总结,最后总结一下吧。嗯,在咱们的文档里。就是最后的总结啊,就是。呃,这个1t last movie饭。这两个呢,呃在配合使用的时候,它起到的是协商是否这个呃去使用缓存,然后。这是协商缓存。然后我们这个,呃,Control。和express。
13:01
这是强制缓存。强制缓存的,它比较适合。页面首次打开,直接读取这个缓存数据。当刷新的时候。会像。呃,服务器。发起请求,那么发起请求之后呢,就进入到我们这个协商缓存了,咱们商量商量还有没有的商量,那如果有的商量,就说明一或者拉莫迪范这俩没变。对吧,那如果没发生变化,它返回304啊,不发送数据,这就是两个配合来使用,如果发生变化了,那我就给你返回这个这个最新的这个这个数据,这样比较符合逻辑,我本来想刷新一下,看看这页面有没有变化,对吧。
14:14
那么没变化呢,我就没变化再给你发一遍了嘛,既然没有变化我给你发,这其实真的就没有意义了,对吧,只是浪费这个网络带宽,如果哪怕有一个字有变化啊,或者多加了一空格,它也是稍微有那么一点区别的,只要是对不上了拉莫或者一我就把最新页面发送给你,这也是符合逻辑的,所以这两个逻辑配合一起使用客户端的缓存呢,就能够,呃,比较这个完善比较完整了,既不会。造成这个请求资源的浪费,同时呢,也可以展示最新的页面啊,展示给我们啊,这就是这个基于客户端的这个缓存的一些配置啊,我们先讲到这儿。
我来说两句