接着上篇去聊一下,缓存的主要类型
缓存的类型主要分为客户端缓存,浏览器缓存,CDN缓存,反向代理缓存,应用缓存等;
客户端缓存相对于其他端的缓存而言,要简单一些,目的就是加速各种静态资源的访问,想想现在的大型网站,随便一个页面都是一两百个请求,每天 pv 都是亿级别,如果没有缓存,用户体验会急剧下降、同时服务器压力和网络带宽都面临严重的考验。客户端缓存主要分为两种:页面缓存和浏览器缓存
页面缓存
页面缓存有两层含义: 一个是页面自身对某些元素或全部元素进行缓存;另一层意思 是服务端将静态页面或动态页面的元素进行缓存, 然后给客户端使用。 这里的页面缓存指 的是页面自身的缓存或者离线应用缓存。
页面缓存是将之前渲染的页面保存为文件, 当用户再次访问时可以避开网络连接, 从而减少负载, 提升性能和用户体验。
浏览器缓存
浏览器缓存:这种形式使用很广泛,极大地提升了用户体验,但有时会出现没及时更新导致显示“错误”的信息。把已经请求过的Web资源(如html页面,图片,js,css等)拷贝一份副本储存在浏览器中,缓存会根据进来的请求保存输出内容的副本。这种缓存带来的好处有三点:减少网络带宽消耗,降低服务器压力,减少网络延迟、加快页面打开速度,适合请求量大、静态的数据请求。
当我们请求一个网页的时候,服务器会向浏览器返回大量数据,但是这些数据需要全部缓存吗?浏览器又是如何区分哪些数据需要进行缓存,哪些是需要实时跟源站获取的?接下来我们就来看一下浏览器的缓存策略。
服务器可以在响应中返回 ETag,然后浏览器会在后续的请求中携带上这个参数来确定缓存是否需要更新。如果 ETag 值相同,说明资源未更改,服务器会返回 304响应码,浏览器就知道本地缓存仍然是可以使用的。
不过需要注意的是,ETag 只有在本地缓存已过期(Expires)或者缓存模式设置为 no-cache(Cache-Control)的时候,才会被浏览器携带上与服务器端的值进行判别。
CDN缓存
CDN 是互联网上内容分发的重要一环。无论您之前是否了解过 CDN,其实它已经在您的日常生活中发挥作用了。比如您正在淘宝挑选心仪的商品,或者在观看本视频,这些资源展示的背后都有 CDN 的默默支撑。
为什么 CDN 使用如此广泛呢?首先大家需要知道,CDN 旨在解决的最重要的问题是什么,我们称之为网络延迟。举个例子,当您输入一个网址,敲击回车后到网页内容实际出现在屏幕上,中间加载耗费的这个时间,就是网络延迟。通过网络获取资源总是比从本地获取慢,无论服务器是在同一个局域网中还是位于世界的另一个角落,都是如此。这里的速度差异是 IT 行业的一个核心问题,开发者想了很多办法试图去弥补这个差异,CDN 就是应用最为广泛的一个解决方案。
CDN 为解决网络延迟提供了一整套技术方案,在使用了 CDN 之后,数据是如何被缓存的,以及缓存是如何提高数据加载速度的。
在未接入CDN 之前,用户使用浏览器访问服务的时候,相互交互的过程如下图所示。
用户在第一次访问网站服务器的时候,浏览器会从服务器获取所有的资源,在传输过程中,浏览器会通过一些约定好的响应头,从而确定是否需要将这个资源保存一份到本地作为缓存。当用户第二次访问该网站的时候,浏览器就会优先从缓存中加载资源,不用向服务器请求资源,从而提高了网站的访问速度。
而对于一些用户访问量巨大的网站而言,如果所有用户都去服务器请求数据,服务器会很快崩溃,并且在不同网络以及不同地区的用户,请求服务器的速度也不一样。为了提高这部分用户的访问速度,CDN 中又提出了新的网络架构,即创建一些最接近用户网络的边缘服务器,然后将文件缓存在这些边缘服务器(节点)上,这就是 CDN 缓存。
反向代理缓存
最近工作中用到反向代理,我只知道有代理这个概念,并不清楚代理还有正向和反向之分,首先弄清楚什么是正向代理,什么是反向代理,然后是二者在实际使用中展示的方式是什么样的,最后总结一下正向代理用来做什么,反向代理可以做什么。
正向代理( Forward Proxy ):
目前国内无法访问google