配置状态码过期时间

CDN节点从源站获取资源时,源站会返回响应状态码,您可以在阿里云CDN上配置状态码缓存时间,当客户端再次请求相同资源时,由CDN直接响应状态码,不会触发回源,减轻源站压力。当状态码超过设置的缓存时间,会重新触发回源。

适用场景

配置状态码过期时间主要适用于源站响应了异常状态码的情况下,用于指定CDN节点上执行的缓存处理动作。

正常情况下CDN节点成功从源站获取到所请求的资源,即源站响应了2xx状态码时,会按照阿里云CDN默认缓存规则及优先级进行缓存。如果源站无法迅速响应所有状态码(例如非2xx状态码),且不希望所有请求全部由源站响应,那么可以配置状态码过期时间,由CDN节点直接响应状态码,减轻源站压力。

典型场景

文件A在源站已被删除,但客户端仍持续访问,CDN节点没有缓存文件A,所有针对文件A的请求都将被转发回源,由源站响应4xx状态码,这将会大幅增加源站的压力。如果CDN节点上配置了缓存4xx状态码,那么CDN节点针对文件A的请求首次回源后,会缓存4xx状态码,在预设缓存时间内,当客户端再次请求文件A时,将会由CDN节点直接响应4xx状态码,无需回源。

异常状态码缓存规则

  • 对于204、305、400、403、404、405、414、500、501、502、503和504状态码,缓存规则如下图所示:状态码缓存过期时间

    • 请求通过配置Range回源时,缓存规则如下:

      • 非200、206状态码(包含但不限于204、305、400、403、404、405、414、500、501、502、503和504状态码)的情况下,均不缓存。

        200、206状态码按照阿里云CDN默认缓存规则及优先级进行缓存。

      • 收到5xx状态码会删除已缓存的分片文件(回源超时不会删除缓存文件)。

        说明

        Range回源情况下,源站会把一个大文件分割成多个小的文件分片来返回给CDN节点。比如有个文件被分割成了10个分片,CDN节点已经缓存了5个分片,在请求第6个分片时,源站响应了5xx状态码,这时会把前面已经缓存的5个分片全部删除。

    • 请求未通过配置Range回源时,按照如下规则缓存:

      1. 如果源站返回set-cookie响应头,CDN不缓存。

      2. 如果源站没有返回Set-Cookie响应头,则遵循CDN控制台配置的状态码过期时间来缓存,配置多条规则时生效方式请参考多条规则生效优先级说明

      3. 如果源站没有返回Set-Cookie响应头,CDN控制台也没有配置状态码过期时间,则按照源站设置的PragmaCache-Control或者Expires响应头来缓存。

      4. 如果源站没有返回Set-CookiePragmaCache-Control或者Expires响应头,CDN控制台也没有配置状态码过期时间,则默认缓存1秒。

  • 对于303、304、401、407、600和601状态码,CDN均不进行缓存。

多条规则生效优先级说明

支持设置多条状态码缓存规则,当某个请求同时匹配了多条规则时,只会有一条规则生效,生效规则如下:

  • 判断顺序

    先判断规则类型(文件后缀名>目录),再判断规则创建时间(先创建的>后创建的)。

  • 不同类型规则的生效优先级:文件后缀名>目录。

    例如,如果用户的请求同时匹配了2条规则(均配置了404状态码),规则类型分别为文件后缀名目录类型,404状态码的过期时间以类型为文件后缀名的规则为准。具体示例,请参见配置示例

  • 相同类型规则的生效优先级:先创建的>后创建的(规则列表由上而下)。

    例如,如果用户的请求同时匹配2条规则(均配置了404状态码),规则类型相同(均为文件后缀名或均为目录类型),404状态码的过期时间以“最早创建”的规则为准。具体示例,请参见配置示例

操作步骤

  1. 登录CDN控制台

  2. 在左侧导航栏,单击域名管理

  3. 域名管理页面,找到目标域名,单击操作列的管理

  4. 在指定域名的左侧导航栏,单击缓存配置

  5. 单击状态码过期时间页签。

  6. 单击添加,配置状态码过期时间。

    配置文件和目录状态码过期时间

    类型

    注意事项

    类型

    支持目录文件后缀名这两种类型,请根据您的实际需求选择。

    说明

    不同类型规则的生效优先级:文件后缀名>目录,具体请参见异常状态码缓存规则

    地址

    • 类型选择为目录,填写说明如下:

      • 每次只能添加一条目录。

      • 支持输入目录的完整路径,须以正斜线(/)开头,例如/directory/aaa

    • 类型选择为文件后缀名,填写说明如下:

      • 支持输入一个或多个文件后缀名,多个文件后缀名用半角逗号(,)分隔,例如jpg,txt

        说明

        不同记录中配置的文件后缀名类型完全相同,仅有大小写区分时,后面创建的会覆盖掉前面创建的,例如创建jpg,txt规则后,再创建jpg,txt规则时,会覆盖掉之前创建的jpg,txt记录。此时,如果需要配置小写规则,可以单独创建txt和jpg的规则。配置规则实际生效的时候是严格区分大小写。

      • 不支持用星号(*)匹配所有的文件类型。

    状态码过期时间设置

    需要缓存的状态码及其缓存时间,最长可设置3年,单位:秒,配置规则如下:

    • 多个状态码用半角逗号(,)分隔。

    • 对于2xx、3xx状态码,仅支持单个精准配置,不支持模糊批量配置。例如,201=10(支持),2xx=12(不支持)。

    • 对于4xx、5xx状态码,既支持单个精准配置,也支持模糊批量配置。例如,401=10(支持),4xx=12(也支持)。

  7. 单击确定,完成配置。

    成功配置状态码过期时间后,您可以在状态码过期时间列表中,对当前的配置进行修改删除操作。

配置示例

  • 示例一:目录类型规则

    创建目录类型规则如下图所示:示例一

    在/directory/aaa目录下,所有4xx状态码缓存时间为10秒,201状态码缓存时间为15秒,在该时间区间内,由CDN节点直接响应对应的访问请求;超过该时间后,会触发回源。

  • 示例二:文件后缀名类型规则

    创建文件后缀名类型规则如下图所示:示例二

    文件后缀为.jpg或.txt类型,403状态码缓存时间为10秒,404状态码缓存时间为15秒,在该时间区间内,由CDN节点直接响应对应的访问请求;超过该时间后,会触发回源。

  • 示例三:不同类型规则的生效优先级

    分别创建了一条“目录类型规则”和一条“文件后缀名类型规则”,设置了不同的状态码过期时间,如下图所示:示例三

    用户请求 http://example.com/directory/aaa/test.jpg,CDN节点上没有缓存资源,CDN节点向源站请求资源,源站响应了404状态码,这里同时匹配上了“目录类型规则”和“文件后缀名类型规则”,因为在规则类型不同的情况下,规则生效优先级是文件后缀名>目录,所以“文件后缀名类型规则”生效,404状态码的实际缓存时间是20秒。

  • 示例四:相同类型多条规则的生效优先级

    先创建了一条“目录类型规则一”,匹配的地址是“/directory”,然后再创建另一条“目录类型规则二”,匹配的地址是“/directory/aaa”,设置了不同的状态码过期时间,如下图所示:示例四

    用户请求http://example.com/directory/aaa/test.jpg,CDN节点上没有缓存资源,CDN节点向源站请求资源,源站响应了404状态码,这里同时匹配上了两条“目录类型规则”,因为在规则类型相同的情况下,规则生效优先级是早创建的>晚创建的,所以最早创建的“目录类型规则一”生效,404状态码的实际缓存时间是15秒。

相关API

BatchSetCdnDomainConfig