
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
在达内学习软件编程开发技术是目前大多数再就业人群都会选择的一个学习之路,而本文我们就通过案例分析来简单了解一下,HTTP缓存是什么?
Http缓存其实就是浏览器保存通过HTTP获取的所有资源,
是浏览器将网络资源存储在本地的一种行为。
请求的资源在哪里?
6.8kB+200状态码:没有命中缓存,实际的请求,从服务器上获取资源;
memorycache:资源缓存在内存中,不会请求服务器,一般已经加载过该资源且缓存在内存中,当关闭页面时,此资源就被内存释放掉了;
diskcache:资源缓存在磁盘中,不会请求服务器,但是该资源也不会随着关闭页面就释放掉;
304状态码:请求服务器,发现资源没有被更改,返回304后,资源从本地取出;
serviceworker:应用级别的存储手段;
HTTP缓存分类
1.强缓存
浏览器加载资源时,会先根据本地缓存资源的header中的信息判断是否命中强缓存。如果命中,则不会像服务器发送请求,而是直接从缓存中读取资源。
强缓存可以通过设置HTTPHeader来实现:
http1.0→Expires:响应头包含日期/时间,即在此时候之后,响应过期。
http1.1→Cache-Control:max-age=:设置缓存存储的大周期,超过这个时间缓存被认为过期(单位秒)。与Expires相反,时间是相对于请求的时间
Cache-control
cache-control:max-age=3600:表示相对时间
cache-control:no-cache→可以存储在本地缓存的,只是在原始服务器进行新鲜度在验证之前,缓存不能将其提供给客户端使用
cache-control:no-store→禁止缓存对响应进行复制,也就是真正的不缓存数据在本地;
catch-control:public→可以被所有用户缓存(多用户共享),包括终端、CDN等
cache-control:private→私有缓存
2.协商缓存
当浏览器对某个资源的请求没有命中强缓存,就会发一个请求到服务器,验证协商缓存是否命中,如果协商缓存命中,请求返回的http状态304,并且会显示NotModified的字符串;
协商缓存通过【last-Modified,if-Modified-Since】与【ETag,if-None-Match】来管理的。
「Last-Modified、If-Modified-Since」
last-Modified:表示本地文件后修改的日期,浏览器会在请求头中带上if-Modified-since(也是上次返回的Last-Modified的值),服务器会将这个值与资源修改的时间进行匹配,如果时间不一致,服务器会返回新的资源,并且将Last-modified值更新,并作为响应头返回给浏览器。如果时间一致,表示资源没有更新,服务器会返回304状态,浏览器拿到响应状态码后从本地缓存中读取资源。
「ETag、If-None-Match」
http1.1中,服务器通过Etag来设置响应头缓存标示。Etag是由服务器来生成的。
一次请求时,服务器会将资源和ETag一并返回浏览器,浏览器将两者缓存到本地缓存中。
二次请求时,浏览器会将ETag的值放到If-None-Match请求头去访问服务器,服务器接收请求后,会将服务器中的文件标识与浏览器发来的标识进行比对,如果不同,服务器会返回更新的资源和新的Etag,如果相同,服务器会返回304状态码,浏览器读取缓存。
思考为什么有了Last-Modified这一对儿,还需要Etag来标识是否过期进行命中协商缓存
文件的周期性更改,但是文件的内容没有改变,仅仅改变了修改时间,这个时候,并不希望客户端认为该文件被修改了,而重新获取。
如果文件文件频繁修改,比如1s改了N次,If-Modified-Since无法判断修改的,会导致文件已经修改但是获取的资源还是旧的,会存在问题。
某些服务器不能精确得到文件的后修改时间,导致资源获取的问题。
如果Etag与Last-Modified同时存在,服务器会先检查ETag,然后在检查Last-Modified,终确定是返回304或200。
HTTP缓存实践
测试环境:利用Koa,搭建一个node服务,用来测试如何命中强缓存还是协商缓存
当index.js没有配置任何关于缓存的配置时,无论怎么刷新chrome,都没有缓存机制的;
注意:在开始实验之前要把network面板的Disablecache勾选去掉,这个选项表示禁用浏览器缓存,浏览器请求会带上Cache-Control:no-cache和Pragma:no-cache头部信息。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。