【CDN 最佳实践】CDN缓存策略解读和配置策略

简介: CDN 作为内容分发网络主要是将资源缓存在 CDN 节点上,然后后续访问即可直接通过 CDN 节点将资源返回给客户端,而不再需要回到源站服务器以加快请求速度。那么 CDN 到底对于哪些请求加速呢?其缓存规则和缓存时间是怎么样的呢?怎么样的缓存规则更加合理呢?本文就对 CDN 的缓存规则解读。

CDN 作为内容分发网络主要是将资源缓存在 CDN 节点上,然后后续访问即可直接通过 CDN 节点将资源返回给客户端,而不再需要回到源站服务器以加快请求速度。那么 CDN 到底对于哪些请求加速呢?其缓存规则和缓存时间是怎么样的呢?怎么样的缓存规则更加合理呢?本文就对 CDN 的缓存规则解读。

CDN 的缓存适用范围

CDN 对于常见的 HTTP 请求均是支持的,具体对不同请求方式的支持情况请参考表一。但是有一点需要注意的是虽然对这些类型的 HTTP 请求均是支持的,但是并不是对所有请求方式都会进行缓存的。 CDN 仅会对于 GET 请求进行缓存,而对于其他的请求均不进行缓存,仅是起到中间代理、转发的功能。因此我们建议添加 CDN 的站点源站最好能够实现动静分离。将动态请求和静态请求的内容独立成两个站点,而 CDN 仅仅加速静态站点中的资源。


                                                                        表一. CDN 对 HTTP 请求支持情况

请求方式 描述 是否支持
GET 从指定的资源请求数据 支持
POST 向指定的资源提交要被处理的数据 支持
HEAD 与 GET 相同,但只返回 HTTP 报头,不返回文档主体 支持
PUT 上传指定的 URI 支持
DELETE 删除指定资源 支持
OPTIONS 返回服务器支持的 HTTP 方法 支持
CONNECT 把请求连接转换到透明的 TCP/IP 通道 不支持



注意

  1. CDN 处理 HEAD 请求时会将 HEAD 请求转换成 GET 请求回源,因此源站日志中记录的是 GET 请求。
  2. CDN 仅支持 POST 和 PUT 方式发送带有请求体(BODY)的 HTTP 请求。

CDN缓存配置

CDN 的缓存配置截图如图 1 所示。缓存配置包括目录和后缀名两种形式,并且可以针对不同的缓存配置设置不同的权重以决定其优先级。其中后缀名即是针对于特定后缀名设置的缓存规则,而目录则是对该目录及其子目录下的所有文件均生效的。当对同一文件同时设置了后缀名和目录的缓存的话会先依据优先级权值先进行选择,在优先级权值相同的情况下会后缀名策略优先。
                                    image
                                                                        图 1. CDN 缓存配置示意图

CDN 缓存规则

总体而言,CDN 所有的缓存规则均可以按照图 2 中所表述的内容进行判断。下面我们对图 2 中的详细内容信息解读。
                                    image
                                                                        图 2. CDN 缓存规则示意图

  1. CDN 处理一个资源是否缓存首先是需要看源站针对于该资源配置的缓存设置。因为源站的不缓存策略是用户自身控制的,因此是有最高的优先级的,当源站配置了缓存规则则转 2 。而如果没有进行任何配置的话则转 3 ,而对于浏览器缓存情况转 7 。
  2. 当源站配置了以下的规则时, CDN 会认为该资源源站不允许 CDN 缓存,并且这种情况下浏览器也是不会做缓存的,因此会每次请求该资源时都回源站,无法进行缓存加速,如果没有则转 4 :
          1)有s-maxage=0,no-cache,no-store,private其中一种

      2)如果没有s-maxage或者s-maxage=0,并且有max-age=0.
      3)带Pragma: no-cache

  1. 在源站没有配置缓存规则需判断 CDN 控制台是否配置缓存规则,如果配置了缓存规则转 4 ,如果没有配置缓存规则转 5 。
  2. 需判断 CDN 控制台是否有配置缓存规则,如果配置了缓存规则的话那么
    CDN 上的缓存策略将覆盖源站的缓存策略,而控制台缓存配置的优先级为:

      1)权重越高的优先级越好;
      2)同等优先级后缀名优先级高于目录优先级;
      3)相同权重且相同优先级则随机匹配(建议避免第三种场景),如果没有配置缓存规则则转 6 。

  1. 需根据源站的缓存规则进行缓存,常见的源站缓存规则有 Cache-Control和 Expires 头,根据 HTTP 协议 Cache-Control 的优先级高于 Expires 头,并且 s-maxage 设置高于 max-age 设置。
  2. 需遵循 CDN 默认缓存规则,默认缓存规则包括:
          1)对于 response 头没有包括 Etag 或者 Last-Modified 头的文件默认是不缓存的(一般认为此类文件为动态文件);

      2)没有 Last-Modified 头的文件默认但是有 Etag 头的缓存 10 秒;
      3)对于有 Last-Modified 头的会按照(当前时间 - Last-Modified 时间) * 0.1,并且将其限制在 [10,3600] 区间内。

  1. 对于源站设置了不缓存的规则时浏览器是不缓存的;如果 CDN 修改了 Cache-Control 或者 Expires 头时,浏览器会按照该修改头缓存;如果没有修改即会按照源站的策略缓存。

CDN 缓存情况查看

常见通过 HTTP 的响应头查看具体 CDN 的缓存情况,如图 3 即是常见的通过 CDN 访问的响应头,可以根据 X-Cache 查看当前该资源是否有在 CDN的 L1 节点缓存,而查看 L2 节点的缓存情况则需要根据 Via 头中的第一部分查看,如果是 M 即是 MISS,没有命中的状态;而出现 H 即是命中缓存。X-Swift-SaveTime 表示该资源缓存到 CDN 节点上的 GMT 时间(相比于北京时间晚8小时);而 X-Swift-CacheTime 表示该资源在 CDN 节点上缓存多长时间会过期。
                        image
                                                                        图 3. CDN 缓存情况示意图

相关文章
|
安全 数据安全/隐私保护 Windows
乱删文件,电脑不能开机,怎么办
很多朋友在清理电脑时误删系统文件,导致黑屏、蓝屏、无限重启等问题。本文详解误删关键文件后的修复方法,包括安全模式修复、系统恢复工具、命令提示符修复引导、系统还原及重装系统等方案,帮助你应对电脑无法开机的困境。
|
存储 SQL 弹性计算
TiDB概述:定义与基本概念
【2月更文挑战第25天】TiDB是一款高性能、分布式的关系型数据库,它采用Go语言开发,兼容MySQL协议和生态,能够为用户提供强大的数据存储和查询能力。本文将详细介绍TiDB的定义、基本概念以及其核心特性,更好地理解这一开源数据库产品。
1656 5
|
缓存 应用服务中间件 nginx
Web服务器的缓存机制与内容分发网络(CDN)
【8月更文第28天】随着互联网应用的发展,用户对网站响应速度的要求越来越高。为了提升用户体验,Web服务器通常会采用多种技术手段来优化页面加载速度,其中最重要的两种技术就是缓存机制和内容分发网络(CDN)。本文将深入探讨这两种技术的工作原理及其实现方法,并通过具体的代码示例加以说明。
1231 1
|
边缘计算 缓存 安全
CDN:互联网世界的“加速器”与“快递网”——从技术起源到未来趋势的全景解读
内容分发网络(CDN)起源于1990年代末,为解决互联网拥堵而生。通过在全球部署边缘节点,缓存静态资源以缩短传输路径,显著提升访问速度并降低服务器压力。其技术历经四个阶段演进:从早期静态缓存到动态加速、移动优化与安全防护,再到如今的智能化融合,CDN已深度嵌入视频直播、企业数字化转型等场景。未来,结合5G、物联网及Web3.0技术,CDN将从“加速器”进化为智能基础设施,持续赋能数字时代。
|
缓存 边缘计算 安全
云计算 - 内容分发网络CDN技术与应用全解
云计算 - 内容分发网络CDN技术与应用全解
3067 0
|
移动开发 小程序 前端开发
浅谈微信小程序的功能定位和使用场景
浅谈微信小程序的功能定位和使用场景
1151 0
|
开发工具 C++ 异构计算
Xilinx ZYNQ的应用开发介绍
Xilinx的ZYNQ系列是首款可扩展处理平台,以其高性能和计算能力适用于高端嵌入式应用如视频监控和汽车辅助系统。ZYNQ结合了双ARM Cortex-A9 MPCore处理器系统与28nm FPGA技术,提供高度灵活性和配置选项。开发环境包括Xilinx Platform Studio、ARM工具链及第三方软件,支持C/C++和系统C综合。ZYNQ由处理系统(PS)和可编程逻辑(PL)组成,PS是ARM SOC,PL是FPGA。开发工具推荐使用Vivado,Zynq 7000 XC7Z100作为旗舰型号提供丰富的资源。
835 0
|
Linux 网络安全 数据安全/隐私保护
如何使用frp连接实验室内网的电脑
介绍如何使用frp进行内网穿透使处于内网环境的电脑可以被ssh连接
1116 1
|
数据采集 运维 资源调度
|
数据采集 编解码 移动开发
Puppeteer + Nodejs 通用全屏网页截图方案(二)常用参数实现
学习如何对网页截图程序设计基本参数功能。

热门文章

最新文章