You need to enable JavaScript to run this app.
导航
节点缓存规则
最近更新时间:2024.12.11 10:47:58首次发布时间:2024.12.11 10:47:58

本文档介绍CDN加速服务中的缓存规则。

缓存规则概述

缓存规则决定了CDN加速服务如何缓存从源站获取的文件。默认情况下,CDN加速服务遵循源站响应头中对于缓存的指示来缓存收到的文件,参见 默认缓存规则。源站响应头指示CDN加速服务是否需要缓存收到的文件,以及缓存的时长。

如果您需要修改CDN加速服务对特定请求的缓存行为,可以在CDN加速服务中创建缓存规则。例如,您可以创建缓存规则,指定CDN加速服务始终对满足以下条件的请求缓存请求文件,缓存时长为 3 天:

  • 请求 URL 中的目录路径为 /img/loca-food/
  • 文件名以 Chinese 开头。
  • 文件后缀为 .png

说明

  • 随请求文件一起被缓存的还有源站响应中的响应状态码和响应头。也就是说,CDN加速服务缓存的是完整的源站响应。在CDN加速服务响应用户请求时,除了请求文件,响应状态码和响应头也包含在CDN加速服务对用户请求的响应中。

  • 缓存文件时,CDN加速服务将源站响应中 Date 头部的值记录为该文件的缓存时间点。

  • 当CDN加速服务收到一个用户请求,如果请求的文件在CDN加速服务的缓存中并且 CDN加速服务判断缓存的文件未过期,该请求被认为是缓存命中。

  • 如果一条缓存规则中的过期时间为 0,则对于匹配该缓存规则的用户请求,CDN加速服务会直接向源站请求文件。另外,对于这些请求,CDN加速服务不会缓存来自源站的文件。

缓存规则配置(精简版)

当CDN加速服务收到来自源站的文件时,缓存规则所指示的CDN加速服务缓存行为如下表所示:

缓存策略策略配置缓存行为缓存时间
遵循规则强制缓存(开)忽略源站响应头的不缓存指示,始终缓存文件。遵循规则中配置的 过期时间
强制缓存(关)不忽略源站响应头的不缓存指示。如果缓存行为未指定,文件不缓存。
遵循源站补充缓存(开)遵循源站响应头的缓存指示。如果缓存行为未指定,文件会被缓存。遵循响应头指定的缓存时长。如果缓存时长未指定,遵循规则中配置的 过期时间
补充缓存(关)遵循源站响应头的缓存指示。如果缓存行为未指定,文件不缓存。遵循源站响应头指定的缓存时长。

关于缓存行为的详细描述,参见 缓存行为的详细描述

默认缓存规则

在缓存规则列表中,有一条系统创建的缓存规则。该规则指示CDN加速服务遵循源站响应头的缓存指示缓存收到的文件。该规则的优先级最低。您无法修改或者删除该规则,您也无法调整该规则的优先级。

如果一个用户请求无法匹配您创建的任何缓存规则,该请求将匹配这条系统创建的缓存规则。

前提条件

您已经添加域名到CDN加速服务。相关操作,请参见添加域名

操作步骤

  1. 登录多云CDN控制台

  2. 在左侧导航栏,单击 CDN加速
  3. 在CDN加速域名列表找到您的域名,单击域名名称。
  4. 在域名页面,单击 缓存配置 页签。
  5. 在页面右上方,单击 编辑配置
  6. 节点缓存规则 区域,单击 新增规则。您最多可以添加 50 条规则。
  7. 根据 配置说明 进行设置。
    alt
  8. 配置完成后,在页面右上方,单击 提交编辑

alt

配置说明

配置说明

规则类型

表示规则中的匹配条件。该配置有以下选项:

  • 文件后缀:表示 URL 路径末尾的扩展名。

  • 文件目录:表示 URL 路径中的一个目录。

  • 文件全路径:表示完整的 URL 路径。

  • 全路径正则表达式:表示一个用于匹配完整 URL 路径的正则表达式。要指定该选项,请 提交工单

规则内容

表示规则中的匹配值。多个匹配值之间以分号(;)分隔,总长度不能超过 1,024 个字符,不能包含以下字符:

  • 连续斜杠(//)、空格、美元符号($)、问号(?)、Delete(ASCII code 127)。
    另外,

  • 如果 规则类型文件后缀,则每个匹配值是一个文件后缀,不能以句点(.)开头。例如:png;txt

  • 如果 规则类型文件目录,则每个匹配值是一个目录路径,必须以斜杠(/)开头和结尾。例如:/chs/foods/;/us/birds/

  • 如果 规则类型文件全路径,则每个匹配值是一个 URL 路径,必须以斜杠(/)开头。匹配值可以包含星号(*)用来表示一个或者多个任意字符。例如:/chs/foods/local*sets;/us/birds/chickadee

  • 如果 规则类型全路径正则表达式,则每个匹配值是一个正则表达式,用于匹配 URL 路径。对于一个请求,如果 URL 路径中的任何部分匹配了该正则表达式,该请求就匹配了这条规则。例如:^/a{1,2}.*g$

忽略大小写匹配

表示匹配值是否是大小写敏感的。 该配置的默认设置是 关闭,表示匹配值是大小写敏感的。例如:规则类型文件后缀,规则内容是 png;txt忽略大小写关闭。此时,该规则匹配 URL 是 HTTPS://www.EXAMPLE.com/image.png 的请求,但是不匹配 URL 是 https://www.example.com/image.PNG 的请求。

缓存策略参见 缓存行为的详细描述

缓存时间

表示请求文件的缓存时长,最小值是 0,最大缓存时长是 3,650 天。

如果您输入 0,表示对于匹配该规则的请求,CDN加速服务会绕过缓存,直接向源站请求文件。对于这些请求,CDN加速服务不会缓存来自源站的文件。

规则生效逻辑

规则列表中的规则具有优先级,优先级最高的规则优先生效。对于一个用户请求,如果某条规则与该请求匹配,只有该规则生效,剩余规则不生效。您可以拖动规则来调整规则的优先级。

缓存行为的详细描述

说明

关于CDN加速服务处理 Cache-Control: no-cache 的方式,参见 CDN加速服务处理 "Cache-Control: no-cache" 的方式

缓存策略策略配置缓存行为缓存时间
遵循规则强制缓存(开)表示CDN加速服务始终缓存请求文件。遵循规则中 缓存时间 的配置。

强制缓存(关)

  • 在以下任意情况下,CDN加速服务不会缓存请求文件。

    • 源站响应包含 Cache-Control: no-storeCache-Control: private头部。
    • 源站响应既不包含 Cache-Control,也不包含 Expires 头部。
  • 在其他情况下,CDN加速服务缓存请求文件。

遵循源站

补充缓存(开)

  • 在以下任意情况下,CDN加速服务缓存请求文件。

    • 源站响应包含 Cache-Control: max-ageExpires 头部。

    • 源站响应既不包含 Cache-Control,也不包含 Expires 头部。

  • 如果源站响应包含 Cache-Control: privateCache-Control: no-store 时,CDN加速服务不会缓存请求文件。

  • 如果源站响应包含 Cache-Control: max-ageExpires 头部,CDN加速服务遵循响应头指定的缓存时长。

  • 如果源站响应既不包含 Cache-Control,也不包含 Expires 头部,CDN加速服务遵循规则中 缓存时间 的配置。

补充缓存(关)

  • 在以下情况下,CDN加速服务缓存请求文件。

    • 源站响应包含 Cache-Control: max-ageExpires 头部。
  • 在以下任意情况下,CDN加速服务不会缓存请求文件:

    • 源站响应包含 Cache-Control: privateCache-Control: no-store
    • 源站响应既不包含 Cache-Control,也不包含 Expire 头部。

遵循响应头指定的缓存时长。

更多信息

CDN加速服务如何判断缓存文件是否过期

当CDN加速服务收到一个用户请求时,如果请求的文件已被CDN加速服务缓存并且以下条件满足,CDN加速服务判断缓存未过期并将缓存文件发送给用户:

  • CDN加速服务收到请求的时间 > 文件的缓存时间点 + 匹配该请求的缓存规则中所指示的缓存时长

缓存规则对CDN加速服务处理用户请求的影响

当CDN加速服务收到一个用户请求时,CDN加速服务处理该请求的步骤如下:

  1. 确定匹配该用户请求的缓存规则。

  2. 基于该缓存规则的指示,确定是否需要查找缓存中的文件。

    • 如果缓存规则指示CDN加速服务绕过缓存,CDN加速服务直接向源站请求该文件。当收到文件后,CDN加速服务将该文件发送给用户。另外,CDN加速服务也不缓存该文件。流程结束。

    • 否则,CDN加速服务查找缓存中的文件。

  3. 判断缓存中是否存在该文件。

    • 如果该文件存在并且未过期,CDN加速服务将缓存的文件发送给用户。流程结束。

    • 如果该文件存在但已过期,CDN加速服务进行 回源校验,也就是向源站校验该文件是否有更新。回源校验有以下结果:

      • 源站上该文件没有更新:在这个情况下,CDN加速服务将缓存的文件发送给用户。流程结束。

      • 源站上该文件有更新:在这个情况下,源站的响应中已包含了最新的文件。继续步骤 4。

    • 如果该文件不存在,CDN加速服务向源站请求该文件。继续步骤 4。

  4. 当收到文件后,CDN加速服务将该文件发送给用户。

  5. 基于该缓存规则的指示,CDN加速服务缓存收到的文件。

文件分片的缓存过期时间

当CDN加速服务收到一个 Range 请求,如果请求的分片已被CDN加速服务缓存,CDN加速服务使用以下步骤判断缓存的分片是否已过期:

  1. 对于该分片所对应的文件,在缓存中查找该文件的所有分片。

  2. 在这些分片中(包括完整文件,如果存在),确定最早被缓存的那个分片,并获取该分片的缓存时间点。

  3. 使用以下公式计算请求分片的过期时间:

    • 过期时间 = 步骤 2 中的缓存时间点 + 匹配该 Range 请求的缓存规则中所指示的缓存时长。
  4. 判断缓存的分片是否已过期。

    • 如果CDN加速服务收到该 Range 请求的时间晚于步骤 3 中的过期时间,则CDN加速服务判断缓存的分片已过期。

    • 否则,CDN加速服务判断缓存的分片未过期。

示例

对于源站上的一个文件,CDN加速服务在某一天的不同时间点收到了以下请求:

  • 09:00:CDN加速服务收到了该文件的分片 A 的请求。分片 A 的缓存时间点是 09:01。

  • 10:00:CDN加速服务收到了分片 B 的请求。分片 B 的缓存时间点是 10:01。

  • 11:00:CDN加速服务收到了完整文件的请求。完整文件的缓存时间点是 09:01。

  • 13:02:CDN加速服务又收到了分片 B 的请求。

对于最后的请求,假设匹配该请求的缓存规则中所指示的缓存时长是 4 小时。由于缓存过期时间是 13:01,CDN加速服务判断缓存的分片 B 已过期。

CDN加速服务不缓存源站响应的情况

在以下任意情况下,CDN加速服务不会缓存源站响应。并且,您无法使用缓存规则改变CDN加速服务的行为。

  • 源站响应中 Content-Length 头部的值为 0

  • 用户请求所使用的方法既不是 GET,也不是 HEAD。

  • 源站响应状态码不是 2xx,并且您未对该状态码配置 状态码缓存

  • 用户请求使用 HEAD 方法,并且源站响应中包含 Transfer-Encoding:chunked 头部。

在以下任意情况下,CDN加速服务不缓存源站响应。然而,您可以创建缓存规则改变CDN加速服务的缓存行为。

  • 源站响应包含 Cache-Control: max-age = 0 头部。

  • 源站响应包含 Expires 头部,并且该头部值所表示的时间早于CDN加速服务收到用户请求的时间。

CDN加速服务处理 "Cache-Control: no-cache" 的方式

响应头 Cache-Control : no-cache 指示CDN加速服务可以缓存收到的文件。但是在CDN加速服务在将该缓存文件发送给用户之前,CDN加速服务需要进行 回源校验

如果您的加速域名收到了这类文件的请求,CDN加速服务不会缓存请求文件。

然而,您可以创建缓存规则改变CDN加速服务的缓存行为。

强制缓存更新

假设CDN加速服务缓存中的某个文件还未过期,但是源站上该文件已经被更新了。您需要用户获取该文件的最新版本。

在这个情况下,您可以在CDN加速服务中对该文件进行刷新操作。刷新操作强制使CDN加速服务将该文件标记为已过期。之后,如果收到该文件的用户请求,CDN加速服务会进行 回源校验。获取到更新文件后,CDN加速服务将更新的文件发送给用户并缓存该更新文件。

回源校验

当一个缓存文件过期后,如果CDN加速服务收到了该文件的请求,CDN加速服务向源站请求该文件。但是如果随该文件缓存的源站响应头中存在 ETag 或者 Last-Modified,CDN加速服务会在回源请求中包含特定的头部。这些头部用于与源站确认该文件是否有更新。回源校验的逻辑如下:

  • 如果 ETag 存在,回源请求中会包含 If-None-Match 头部。该头部的值就是 ETag 的值。

  • 如果 ETag 不存在但是 Last-Modified 存在,回源请求中会包含 If-Modified-Since 头部。该头部的值就是 Last-Modified 的值。

当收到包含 If-None-MatchIf-Modified-Since 头部的请求时,源站服务器会基于该头部检查该文件是否已更新。

  • 如果该文件已更新,源站响应中会包含请求文件,响应状态码是 200。

  • 如果该文件没有更新,源站响应中不会包含请求文件,响应状态码是 304。

基于源站响应中的状态码,CDN加速服务执行以下某个操作:

  • 如果状态码是 304,CDN加速服务将缓存的文件发送给用户。对于之后CDN加速服务收到的该文件的每个请求,CDN加速服务都会进行回源校验。

  • 如果状态码是 200,CDN加速服务将更新的文件发送给用户并缓存更新的文件。