web缓存器和CDN

一、什么是web缓存器

web缓存器,又叫代理服务器,往往作为客户端(浏览器)和服务器之间的“中间人”。web缓存器有自己的磁盘,并会在其中缓存最近请求过的资源

可以将浏览器和web缓存器进行配置,配置后浏览器发送请求时会先发送到web缓存器,如果web缓存器中有请求需要的资源则直接返回;如果没有,web缓存器会和服务器建立TCP连接,并代理浏览器向其发送请求,然后将结果缓存在本地后,返回给浏览器。

web缓存器往往由ISP购买并安装。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ROFO6zdA-1658890827887)(E:/Blog/lansg/source/img/image-20220726175332040.png)]

为什么要使用web缓存器呢?

当客户端距离服务器较远,特别是客户端与服务器之间的瓶颈带宽低于客户端与web缓存器之间的瓶颈带宽时,web缓存器可以大大降低响应时间。通过web缓存器,可以大大减少机构接入到网络中的通信量,这样就不必急于增加带宽,从而降低了费用。而web缓存器的成本往往是很低的,因为其使用了运行在廉价PC上的公共域软件。


二、web缓存器带来的问题

既然是缓存,就肯定会有数据不一致的问题。

看这样一种情况:当浏览器发出请求时,web缓存器收到请求并将其缓存的资源发送给浏览器,可这个资源是最新的还是已经被修改了的呢?我们无从得知。

为了解决这个问题,HTTP协议提供了一种机制,来让web缓存器证实他的对象是最新的。这种机制就是条件GET方法。一个请求报文是一个条件GET请求报文需要达到以下两个要求:

  • 请求报文使用GET方法。
  • 请求报文中包含“If-Modified-Since:”的首部行。

接下来通过一个实际例子来看看以上机制是如何实现的。

1.web缓存器代表浏览器向服务器发送一个请求报文:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X1wVQt5J-1658890827888)(E:/Blog/lansg/source/img/image-20220726182546705.png)]

2.服务器向web缓存器发送响应报文(对象)如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OqoC34or-1658890827889)(E:/Blog/lansg/source/img/image-20220726182636984.png)]

Last-Modified表示最后修改日期。

3.过了一段时间,另一个用户也要请求同一个对象时,web缓存器会向服务器发送一个条件GET请求报文判断当前数据是不是最新的:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g8giMxhy-1658890827889)(E:/Blog/lansg/source/img/image-20220726182925480.png)]

该条件报文告诉服务器,如果该对象在指定日期后被修改过,则重新发送该对象。否则执行第4步

4.服务器向web缓存器发送一个响应报文:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d338OLtd-1658890827889)(E:/Blog/lansg/source/img/image-20220726183110853.png)]

注意数据部分是空的!

在该响应报文中,状态码为304 Not Modified,意味着服务器告诉web缓存器可以使用该对象,并向请求的浏览器转发web缓存器缓存的对象副本!


三、CDN

1.什么是CDN?

CDN,也叫内容分发网络,是服务商依靠部署在各地的边缘服务器节点,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取资源,提高用户访问速度。

简单点来说就是,通过CDN服务器,可以加快服务器对用户请求的响应速度。

举个例子,某个网站的服务器在北京,现在有深圳的用户想要访问网站,那么由于距离、传输速度、路由转发等原因,会导致访问十分缓慢。但假如现在在深圳建立一个CDN服务器,上面缓存了一些源站服务器(北京的服务器)上的资源,那么深圳的用户只用访问该CDN服务器就可以获取相关资源,而不必再去请求源站服务器。这样不仅减轻了源站服务器的压力,也提高了对用户请求的响应速度。

这里就不难看出CDN和web缓存器的关系了,CDN其实是web缓存器的一种。

2.CDN是如何工作的?

作为普通用户,我们只管发送请求,可不管从哪里获取数据。那么服务器是如何将我们的请求定位到距离我们最近的CDN服务器呢?这就需要用到DNS了。

当我们访问网站时,需要通过DNS服务器对网站的域名进行解析,而网站的服务器就会对我们使用的DNS服务器的ip地址进行定位,从而为我们分配最佳的CDN节点。但是这样会出现一个问题,如果用户的ip地址所在地和DNS的ip地址所在地不一致怎么办(对于访问的DNS服务器可以自行配置)?这就会产生错误的调度。

针对这个问题,有另一种解决的办法就是http调度,它是这样实现的:

当用户访问服务器时,先对用户的ip地址进行分析,然后服务器给用户返回一个302状态码(表示临时重定向),于是浏览器会重定向到最佳CDN节点进行资源的访问。

3.CDN存在的问题?

既然CDN服务器也是缓存的一种,那么当源服务器更新数据之后,如何将数据同步到CDN节点呢?有以下两种方式:

(1)源服务器上的数据更新后,主动对CDN节点的缓存进行更新,CDN节点被动接收。但是这样会很容易产生404(请求的资源未找到),所以往往采用第二种方法。

(2)只有当用户请求的资源不存在时,CDN会向源服务器发送请求,将请求到的数据更新到缓存中,然后将数据返回给用户。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值