You need to enable JavaScript to run this app.
导航
配置缓存规则
最近更新时间:2024.07.25 10:55:41首次发布时间:2023.06.01 20:59:12

本文为您介绍如何在视频点播控制台中配置缓存规则。

适用范围

缓存规则适用于点播加速域名、自定义源站加速域名和封面加速域名。

功能介绍

缓存概述

  • 在理论的缓存流程中,视频点播在收到用户对于某个文件的第一次请求时,会向源站请求该文件。在收到该文件时,除了将文件返回给用户,视频点播会缓存该文件。这样,对于未来该文件的请求,视频点播会直接将缓存中的文件返回给用户,实现传输加速。
  • 在实际的缓存流程中,根据用户请求以及源站影响的情况,视频点播会有不同的缓存行为。同时,您还可以通过配置缓存规则来控制视频点播的缓存行为。

说明

如何判断是否需要缓存某个文件,详见下文判断文件是否需要缓存

每个缓存文件都有一个过期时间。如果缓存的文件达到了过期时间,视频点播会判定该文件已过期。之后,如果收到该文件的请求,视频点播会校验缓存文件在源站是否有更新。根据校验结果,视频点播再判断是否更新缓存。详见下文过期缓存文件的回源校验流程

缓存规则概述

在视频点播中,您可以通过配置缓存规则来控制视频点播的缓存行为。在缓存规则中,您可以指定如下内容:

  • 缓存规则所生效的文件。
  • 缓存策略。
  • 缓存的过期时间。

视频点播按照规则的优先级来匹配用户请求。如果匹配到一条规则,视频点播将不再匹配后续规则。

说明

您可以修改或者删除已有的缓存规则。但是在您操作前,您必须了解操作带来的影响。详见变更缓存规则的影响

注意事项

视频点播对请求的文件,不进行缓存的情况如下:

  • 源站响应头中 Content-Length 的字段值为 0
  • 请求的方法既不是 GET 也不是 HEAD
  • 源站的响应状态码不是 2xx,并且您未配置状态码缓存
  • 对于 HEAD 请求,源站响应头包含 Transfer-Encoding:chunked

操作步骤

  1. 登录视频点播控制台,进入指定空间。

  2. 单击左侧导航栏分发加速设置 > 域名管理

  3. 根据您的域名类型,选择点播加速域名自定义源站加速域名封面加速域名页签。

  4. 在域名列表中找到您需要配置的域名,单击操作列的配置按钮。

  5. 单击页面左下角的修改配置按钮。

  6. 缓存配置页签下的缓存规则区域,单击添加规则

  7. 根据页面提示配置缓存规则。
    图片
    详细参数说明如下表示。

    参数

    说明

    优先级

    规则的优先级。数字 1 的规则优先级最高。在收到请求时,CDN 按规则的优先级,从高到低尝试将请求与规则匹配。如果请求匹配了某一条规则,CDN 就停止匹配其余规则。您可以通过拖拽调整规则的优先级。

    规则类型

    缓存规则的类型,表示规则对哪个类型的对象生效。支持以下选项:

    • 文件目录:规则应用于特定目录下的所有文件。
    • 文件后缀:规则应用于特定后缀名的所有文件。
    • 文件全路径匹配:规则应用于特定文件。

    规则

    根据规则类型,输入规则的内容。长度不能超过 1,024 个字符。不能包含以下字符:连续斜杠 //、空格、美元符号 $、问号 ?、Delete(ASCII code 127)。不同规则类型的具体要求如下:

    • 如果规则类型是文件后缀,规则内容必须是一个或者多个以分号 ; 分隔的文件后缀。文件后缀无需以句点 . 开头。示例:png;txt
    • 如果规则类型是目录,规则内容必须是一个或者多个以分号 ; 分隔的目录路径。目录路径必须以斜杠 / 开头和结尾。示例:/chs/foods/;/us/birds/
    • 如果规则类型是文件全路径,规则内容必须是一个或者多个以分号 ; 分隔的文件路径。文件路径必须以斜杠 / 开头,可以包含星号 * 用来表示一个或者多个字符。示例:/chs/foods/local*sets;/us/birds/chickadee

    缓存策略

    支持以下取值:

    • 默认策略:对于匹配规则的文件,如果源站响应头中包含 Cache-Control: no-storeCache-Control: private 字段,则视频点播不会缓存该文件。否则,视频点播会按照规则设定的缓存时间缓存该文件。
    • 强制缓存:对于匹配规则的文件,无论源站响应头是否包含 Cache-Control: no-storeCache-Control: private 等字段,视频点播都会按照规则设定的缓存时间缓存该文件。
    • 源站优先:对于匹配规则的文件,如果源站响应头中包含 Cache-Control: no-storeCache-Control: private 字段,则视频点播不会缓存该文件。如果源站响应头中包含 Cache-Control: max-ageExpires 字段,则视频点播会按照字段指示的时间缓存该文件。如果没有这些字段,视频点播会按照规则设定的缓存时间缓存该文件。

    关于缓存策略对于缓存行为的影响,参见判断文件是否需要缓存

    缓存时间

    指定一个时间单位并输入缓存的时间。您可以指定的最长时间是 10 年,也就是 315,360,000 秒。该配置的说明如下:

    • 如果您指定的时间单位是,您可以输入的最大值是 315360000
    • 如果您指定的时间单位是,您可以输入的最大值是 5256000
    • 如果您指定的时间单位是小时,您可以输入的最大值是 87600
    • 如果您指定的时间单位是,您可以输入的最大值是 3650

    对于缓存策略是默认策略的规则,如果您指定缓存时间为 0,则表示不缓存匹配的文件。缓存时间是 0 的规则建议放在缓存规则列表中的第一条。

    忽略大小写

    设置视频点播在使用规则匹配用户请求的文件时是否区分大小写。请求 URL 的其余部分不受该配置影响。该配置仅在缓存策略默认策略时有效,默认设置是关闭。关闭表示区分大小写。假设对于文件后缀规则,您设置忽略大小写为关闭,您输入的规则内容是 png;txt。此时,该规则可以匹配 HTTPS://www.EXAMPLE.com/volcano.png,但是不能匹配 https://www.example.com/volcano.PNG

  8. 单击保存配置

判断文件是否需要缓存

流程图

图片

流程说明

在视频点播从源站获取用户请求的文件时,缓存的流程如下:

  • 如果视频点播匹配到一条缓存规则,缓存的步骤如下:
    1. 如果规则的缓存策略是强制缓存,即使源站响应头中包含 Cache-Control: no-storeCache-Control: private,该文件依然被缓存。
      文件的缓存过期时间 = 当前时间 + 规则中定义的缓存时间。

      注意

      对满足文件不缓存的用户请求,强制缓存无法使文件被缓存。

    2. 如果规则的缓存策略是源站优先,该文件被缓存。视频点播设置缓存过期时间的步骤如下:
      1. 遵循源站响应头的缓存优先级以及缓存过期时间。
      2. 如果源站响应头中没有包含这些字段,文件的缓存过期时间 = 当前时间 + 规则中定义的缓存时间。
    3. 如果规则的缓存策略是默认策略,缓存的步骤如下:
      1. 如果源站响应头中包含 Cache-Control: no-storeCache-Control: private,该文件不被缓存。
      2. 如果源站响应头中没有包含这两个字段,该文件被缓存。文件的缓存过期时间 = 当前时间 + 规则中定义的缓存时间。如果缓存时间是 0,该文件不被缓存。
  • 如果您没有配置缓存规则或者视频点播匹配不到任何缓存规则,缓存的步骤如下:
    1. 遵循源站响应头的缓存优先级以及响应头指示的缓存时间。
    2. 如果源站响应头中没有包含这些字段,该文件不被缓存。

源站响应头的缓存优先级

视频点播按照以下列表项的顺序处理响应头字段。如果响应头匹配一个列表项,视频点播将不再匹配其他列表项。

  1. 如果源站响应头中包含 Cache-Control: no-storeCache-Control: private。此时,该文件不被缓存。
  2. 如果源站响应头中包含 Cache-Control: max-age,此时:
    • 如果该字段的值 >= 0,该文件被缓存。文件的缓存过期时间 = 当前时间 + 该字段指示的时间。
    • 如果该字段的值 < 0,该文件不被缓存。
  3. 如果源站响应头中包含 Expires,此时:
    • 如果该字段的值 < 当前时间,该文件不被缓存。
    • 如果该字段的值 >= 当前时间,该文件被缓存。文件的缓存过期时间 = 该字段指示的过期时间。

过期缓存文件的回源校验流程

缓存文件过期

视频点播判定缓存的文件过期的情况如下:

  • 缓存文件达到了该文件的过期时间。
  • 在视频点播根据用户请求向源站请求文件时,源站的响应头中包含 cache-control: no-cache 或者 Cache-Control: max-age=0。在该情况下,虽然视频点播会缓存该文件,但是视频点播判定该文件已过期。

回源校验流程

缓存文件过期后,如果收到文件的请求,视频点播会向源站校验该缓存文件是否有更新。回源校验的流程如下:

  1. 如果缓存文件的源站响应头包含 Last-Modified 字段或者 ETag 字段,视频点播会在回源请求头中包含文件校验字段。ETag 的优先级高于 Last-Modified
    • 如果 ETag 字段存在,请求头中会包含 If-None-Match 这个校验字段。该字段的值就是 ETag 的值。
    • 如果 ETag 不存在但是 Last-Modified 存在,请求头中会包含 If-Modified-Since 这个校验字段。该字段的值就是 Last-Modified 的值。
      对于源站的响应状态码:
    • 如果状态码是 304,表示文件在源站没有更新。此时,视频点播不更新缓存文件,直接将缓存文件返回给用户。如果之后再次收到了文件的请求,视频点播会重复执行回源校验流程。
    • 如果状态码是 200,表示文件在源站有更新并且响应中包含了最新的文件。此时,视频点播会根据判断文件是否需要缓存的流程处理该文件。
  2. 如果缓存文件的源站响应头没有包含 Last-ModifiedETag 字段,回源请求头中不会包含文件校验字段。在视频点播收到源站响应后,根据判断文件是否需要缓存处理响应中包含的文件。

变更缓存规则的影响

假设一个文件请求匹配了某条缓存规则而被视频点播缓存,并且该缓存文件还未过期。此时,如果您修改或者删除了该缓存规则,视频点播会根据判断文件是否需要缓存的流程刷新该缓存文件的过期时间。
如果该缓存文件不匹配任何规则,并且该缓存文件的源站响应头不包含 Cache-Control: max-ageExpires,那么视频点播会按以下方式处理该缓存文件:

  • 如果该缓存文件的源站响应头包含 Last-Modified 字段,视频点播会基于 Last-Modified 计算一个时间。该文件的缓存过期时间 = 当前时间 + 计算的缓存时间。
    • 如果计算结果 <= 当前时间,则视频点播判定该文件已过期。
    • 如果计算结果 > 当前时间,则视频点播判定该文件未过期。如果用户请求该文件,视频点播会将缓存的文件返回给用户。此时,如果您需要清除该文件的缓存,您可以对该文件使用刷新操作。刷新后,如果用户请求该文件,视频点播会向源站请求该文件。
  • 如果该缓存文件的源站响应头不包含 Last-Modified 字段,视频点播判定该文件已过期。

如果该缓存文件已过期,在收到该文件的请求时,视频点播会遵循过期缓存文件的回源校验流程

基于 Last-Modified 计算缓存时间

计算 (当前时间 - Last-Modified)* 0.1。单位是秒。

  • 如果 计算结果 < 1小时,缓存时间是 1小时。
  • 如果 1小时 <= 计算结果 <= 1天,缓存时间是实际的计算结果。
  • 如果 计算结果 > 1 天,缓存时间是 1天。