CDN 缓存是什么?
首先来了解下什么是 CDN
CDN 是什么
CDN 内容分发网络,CDN 是 Content Deliver Network 的简称。常说的 CDN 加速指的网站加速或是用户下载资源加速,CDN加速通常是和域名绑定的,会通过 DNS 分离查找找到最近的 CDN 边缘节点 IP
CDN 可以理解为分布在每个县城的火车票代售点,用户在浏览网站的时候,CDN 会选择一个离用户最近的 CDN 边缘节点来响应用户的请求,这样广东的移动用户请求就不会千里迢迢跑到北京的电信机房(假设源站部署在北京的电信机房上)的服务器上了
CDN 的优势
- CDN 节点解决了跨运营商和跨地域访问的问题,访问延时大大降低
- 大部分请求在CDN边缘节点完成,CDN 起到了分流作用,减轻了源站的负载压力
CDN 缓存是什么?
用户浏览器和服务器交互,没有接入 CDN 时:
用户在浏览网站的时候,浏览器能够在本地保存网站中的图片或者其他文件的副本,这样用户再次访问该网站的时候,浏览器就不用再下载全部的文件,减少了下载量意味着提高了页面加载的速度
用户浏览器和服务交互,接入 CDN 时:
客户端浏览器会先检查是否有本地缓存是否过期,如果过期,则向 CDN 边缘节点发起请求,CDN 边缘节点会检测用户请求数据的缓存是否过期,如果没有过期,则直接响应用户请求,此时一个HTTP 请求结束;
如果数据已经过期,那么CDN 还需要向源站发起回源请求,来拉取最新的数据
客户端缓存的缺点
虽然说浏览器的缓存可以帮助我们提高页面访问速度,但也存在一个缺陷,缓存的CSS、JS、IMAGE 等资源更新了之后浏览器并不知道,还在使用旧资源。
这种则需要用户手动强制刷新才能访问新资源
手动刷新也有以下几个区别
在地址拦中输入网址后按回车
这种方式 浏览器会以最少的请求来获取网页的数据,浏览器会对所有没有过期的内容直接使用本地缓存,从而减少浏览器的请求,所以,我们设置的 HTTP 强缓存 Cache-control、Expires 中的 max-age 标记方式只会这种方式有效。按 F5 或 浏览器刷新按钮
这种方式,浏览器会在请求中附加必要的协商缓存,但不允许浏览器直接使用本地缓存,所以这种方式它对 ETag、Last-Modified 起作用,对 Cache-control、Expires 无效按 Ctrl + F5
这是一种强刷的方式,不使用任何缓存
CDN 缓存
浏览器本地缓存失效后,浏览器会向 CDN 边缘节点发起请求。跟浏览器一样,CDN 边缘节点也存在着一套缓存机制。
CDN 缓存策略
CDN 边缘节点的缓存策略因服务商不同而不同,但一般都会遵循 HTTP 标准协议,通过 HTTP 响应头中的 Cache-Control: max-age 字段来设置 CDN 边缘节点数据的缓存时间
当客户端向 CDN 节点请求数据时,CDN 节点会判断缓存数据是否过期,若缓存数据没有过期,则直接将缓存数据返回给客户端,否则 CDN 会向源站发出回源请求,从源站拉取最新数据,更新本地缓存,并将最新数据返回给客户端。
CDN 缓存主要是通过 文件目录和文件后缀名配置 多个维度来指定 CDN 缓存时间。
CDN 缓存时间会对“回源率”产生直接的影响。若 CDN 缓存时间较短,CDN 边缘节点上的数据会经常失效,导致频繁回源。若 CDN 缓存时间太长,会带来数据更新时间慢的问题。
CDN 缓存刷新
CDN 边缘节点对开发者是透明的,相比于浏览器 Ctrl + F5 的强制刷新来使浏览器本地缓存失效,开发者可以通过 CDN 服务商提供的 “刷新缓存” 接口来达到清理 CDN 边缘节点缓存的目的。这样开发这更新数据后,可以使用“刷新缓存”功能来强制 CDN 节点上的数据缓存过期,保证客户端子啊访问时,拉取到最新的数据。