缓存

128 阅读2分钟

缓存是数据交换的缓存区,是计算机不可或缺的一部分,利用好缓存可以提高计算机的性能和用户体验。由于cpu的存取速度比硬盘快得多,所以操作系统会从硬盘取出数据到内存中,等待cpu利用。平时我们从网络上获取的资源,也会有一部分缓存在浏览器中,等待下次使用的时候就无需去请求服务器,减少所耗费的时间,虽然现在的网速很快,但是tcp等协议的使用还是很耗费资源的,慢于使用缓存。实现这个是通过在http头中写入的相应字段,例如cache-control,expires,Etag,if-none-match,last-modified,if-modified-since等。

如果设置了cache-control和expires的区别是,前者是http/1.1的,后者是http/1.0的,其中的max-age参数,前者是相对时间,后者是绝对时间,no-cache参数则浏览器缓存但请求的时候不利用缓存而直接向服务器请求,no-store参数则浏览器不进行缓存。

在第一次请求的时候,服务器的响应头会有Etag字段,浏览器会对其保存并等待下次请求时将其赋值给if-none-match,发给服务器。

在第一次请求的时候,服务器的响应头会有last-modified字段,浏览器会对其保存并等待下次请求时将其赋值给if-modified-since,发给服务器。

首先浏览器输入URL回车发起请求时,会先在缓存中查找是否有这个文件,如果没有则向服务器发出请求,如果有就在缓存中获取,当max-age设定的时间过期后,浏览器就会把if-none-match,if-modified-since发到服务器进行验证,如果内容没有发生变化或者没过期,那么服务器会返回一个304给浏览器,此时浏览器会从缓存中获取相关内容,否则,服务器会返回新的响应内容,并且把新的Etag和last-modified返回。