CDN 是互联网上内容分发的重要一环。无论您之前是否了解过 CDN,其实它已经在您的日常生活中发挥作用了。比如您正在淘宝挑选心仪的商品,或者在观看一段令人捧腹的视频,以及您正在阅读的这篇文章,这些资源展示的背后都有 CDN 的默默支撑。
为什么 CDN 使用如此广泛呢?首先大家需要知道,CDN 旨在解决的最重要的问题是什么,我们称之为网络延迟。举个例子,当您输入一个网址,敲击回车后到网页内容实际出现在屏幕上,中间加载耗费的这个时间,就是网络延迟。通过网络获取资源总是比从本地获取慢,无论服务器是在同一个局域网中还是位于世界的另一个角落,都是如此。这里的速度差异是 IT 行业的一个核心问题,开发者想了很多办法试图去弥补这个差异,CDN 就是应用最为广泛的一个解决方案。
CDN 为解决网络延迟提供了一整套技术方案,今天我们介绍的缓存就是其中重要的一环。这篇文章主要介绍在使用了 CDN 之后,数据是如何被缓存的,以及缓存是如何提高数据加载速度的。
缓存的优点在未接入CDN 之前,用户使用浏览器访问服务的时候,相互交互的过程如下图所示。
image
用户在第一次访问网站服务器的时候,浏览器会从服务器获取所有的资源,在传输过程中,浏览器会通过一些约定好的响应头,从而确定是否需要将这个资源保存一份到本地作为缓存。当用户第二次访问该网站的时候,浏览器就会优先从缓存中加载资源,不用向服务器请求资源,从而提高了网站的访问速度。
image
例如我们第一次访问又拍云官网,下面就是浏览器加载资源的快照,可以看到 5.6MB 的数据被传输到本地。
image
在刷新又拍云官网后,我们可以看到传输数据降到了 9.9KB,在使用了缓存之后,浏览器不用再下载全部的文件,减少了下载量也就意味着提高了页面加载的速度。
image
通过上面的例子,可以直观地观察到浏览器缓存对解决网络延迟起到的作用是非常明显的。
而对于一些用户访问量巨大的网站而言,如果所有用户都去服务器请求数据,服务器会很快崩溃,并且在不同网络以及不同地区的用户,请求服务器的速度也不一样。为了提高这部分用户的访问速度,CDN 中又提出了新的网络架构,即创建一些最接近用户网络的边缘服务器,然后将文件缓存在这些边缘服务器(节点)上,这就是 CDN 缓存。
image
大家可以看到,服务接入了 CDN 后,数据经历了客户端(浏览器)缓存和 CDN 边缘节点缓存两个阶段,那么下面就分别对这两个阶段的缓存进行介绍。
浏览器缓存介绍当我们请求一个网页的时候,服务器会向浏览器返回大量数据,但是这些数据需要全部缓存吗?浏览器又是如何区分哪些数据需要进行缓存,哪些是需要实时跟源站获取的?接下来我们就来看一下浏览器的缓存策略。
浏览器缓存策略服务器会在资源返回的响应中,携带上以下四个常用的响应头,浏览器会通过判别这些响应值来决定资源缓存的状态。
ETag
Cache-Control
Expires
Last-Modified
ETag
ETag 值是一个字符串,其内容通常是数据的哈希值,每个数据都有一个单独的标志,只要这个文件发生了改变,这个标志就会发生变化。