编程知识点程序员饥人谷技术博客

关于Web缓存的方方面面

2017-08-03  本文已影响200人  R_JsBest

关于Web缓存的知识点总结

因为才写了关于响应式瀑布流懒加载的插件,做了简单的优化,但是发现,实用性并不强,不过对于其中过程中所涉及的东西能有一个更全面的认识,这里对于图片压缩等方面暂时不提,只说一说关于Web缓存方面的东西,这对于线上加载图片类资源还是很有用的(本人是准大三,很多地方总结的可能不到位,烦请指正,共勉)

Paste_Image.png Paste_Image.png

原本的用户访问请求的处理是以下过程:
1.用户向浏览器提供要访问的域名;
2.浏览器调用域名解析函数库对域名进行解析,以得到此域名对应的IP地址;
3.浏览器使用所得到的IP地址,域名的服务主机发出数据访问请求;
4.浏览器根据域名主机返回的数据显示网页的内容。

但是在用了CDN之后,就发生了改变,因为对于CDN客户来说,不需要改动网站架构,只需要修改自己的DNS解析,设置一个CNAME指向CDN服务商即可。

其基本工作原理是下面这个样子:
1.用户向浏览器提供要访问的域名;

2.浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,所以解析函数库得到的是该域名对应的CNAME记录(由于现在已经是使用了CDN服务,CNAME为CDN服务商域名),为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,使用的全局负载均衡DNS解析,如根据地理位置信息解析对应的IP地址,使得用户能就近访问。(CDN服务来提供最近的机器)

3.此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,向缓存服务器发出访问请求;

4.缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;

5.缓存服务器从实际IP地址得得到内容以后,一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程;

6.客户端得到由缓存服务器返回的数据以后显示出来并完成整个浏览的数据请求过程。

3 和 4在后续会详细描述、

浏览器的缓存机制

缓存虽然好,但并不意味着所有的资源都应该采用缓存机制来存取,它是由一套完整的规则定义出的结果,来决定什么时候使用缓存中提供的副本提供服务,有的在HTTP协议有定义,有的则是由缓存的管理员设置。

而对于浏览器的缓存来讲,这里是从前端的视角来说明这些问题,缓存的规则是在HTTP协议头和HTML页面的meta标签中定义,它们分别从新鲜度和校验值两个方面来浏览器是应该选择读取缓存副本数据还是向源服务器发送请求。

1.新鲜度(过期机制)也就是缓存副本的有效期,一个缓存副本必须满足以下条件之后,浏览器才会认为它是有效的,分别是: “含有完整的国旗时间控制头信息”、“浏览器已经使用过这个缓存副本,并且在一个会话中已经检查过新鲜度”。

2.校验值(验证机制)是服务器返回资源的时候有时候会在控制头信息附带这个资源的Etag实体标签,用来作为浏览器再次请求过程的校验标识,如果不匹配,说明资源已经被修改或者过期,浏览器这个时候就会判定应该向源服务器请求资源,而不是读取缓存数据,这方面若要详细理解,还是得去看《计算机网络》和《HTTP权威指南》

3.对于浏览器的缓存控制方法比较多。

前端开发在HTML页面的控制可以看这个链接,对于如何在meta标签中设置一系列控制规则

而重点还是在对于HTTP的设置和理解上,而在HTTP请求和响应的消息报头中,常见的与缓存有关的消息报头如下:

Paste_Image.png

这里得提一下一些具体操作对浏览器缓存的影响:

Paste_Image.png

上面既然提到了缓存的一些具体设置,那么肯定也少不了了解“哪些请求不能被缓存?”
1.HTTP信息头中包含Cache-Control:no-cache,pragma:no-cache,或Cache-Control:max-age=0等告诉浏览器不用缓存的请求。

2.需要根据Cookie,认证信息等决定输入内容的动态请求是不能被缓存的。

3.经过HTTPS安全加密的请求。

4.POST请求无法被缓存。

5.HTTP响应头中不包含Last-Modified/Etag,也不包含Cache-Control/Expires的请求无法被缓存。

这里还没有更总结完,文字内容以 AlloyTeam为参考,结合其余知识点的汇总以及个人理解,还没更新完,待续。

上一篇 下一篇

猜你喜欢

热点阅读