默认缓存规则

更新时间:

在使用边缘安全加速 ESA加速静态资源时,边缘安全加速 ESA会将源站上的资源缓存到距离客户端最近的边缘安全加速 ESA节点上。当您访问该静态资源时,可以直接从边缘安全加速 ESA的缓存节点上获取,有效避免通过较长的链路回源,提高资源访问效率。阿里云边缘安全加速 ESA的所有节点都包含缓存软件,在用户请求或者源站响应资源经过边缘安全加速 ESA节点时,缓存软件会根据需要对源站资源进行缓存,并设定缓存过期时间。

默认缓存策略

客户端请求只有在进入边缘安全加速 ESA缓存组件的情况下,缓存配置才会生效。客户端请求是否进入缓存组件需要按顺序经过三重判断,相关说明如下:

  1. 用户请求类型判断:默认只有GET、HEAD请求类型才能进入缓存组件。

  2. 缓存规则判断:判断用户请求是否符合缓存规则中设定的规则条件,如果符合,用户请求将会使用缓存规则中设定的缓存配置(缓存规则的生效优先级高于全局缓存配置),具体请参见缓存配置生效逻辑

  3. 请求文件类型判断:判断用户请求需要访问的文件类型是否符合默认缓存的文件扩展名中的文件类型,如果符合,用户请求将会使用全局配置中设定的缓存配置。

image

默认缓存的文件扩展名

默认情况下,用户请求的资源的文件后缀是下面这些类型时,用户请求会经过缓存模块(即对应绕过缓存功能的默认规则),至于资源在缓存模块上的缓存过期时间,还需要按该资源命中的缓存规则。

说明

如果要缓存的资源类型不在以下文件类型中,可以参阅 规则引擎 以创建缓存所需资源的规则策略。

文件类型

文件扩展名说明

文档文件

  • .DOC, .DOCX - Microsoft Word 文档。

  • .PPT, .PPTX - Microsoft PowerPoint 演示文稿。

  • .PDF - 便携式文档格式。

  • .CSV - 逗号分隔值文件。

图像文件

  • .BMP - 位图图像。

  • .GIF - 图形交换格式。

  • .ICO - 图标图像文件。

  • .JPEG, .JPG - JPEG 图像。

  • .PNG - 可移植网络图形。

  • .SVG, .SVGZ - 可缩放矢量图形。

  • .TIF, .TIFF - 标签图像文件格式。

  • .WEBP - 一种现代的图像格式,提供有损和无损压缩。

音频文件

  • .MP3 - MPEG 音频层 III。

  • .FLAC - 无损音频压缩。

  • .MID, .MIDI - 乐器数字接口音乐。

视频文件

  • .AVI - Audio Video Interleave。

  • .MP4 - MPEG-4 视频。

  • .MKV - Matroska 视频容器。

  • .WEBM - 一种开放的媒体容器格式,支持视频和音频。

压缩文件

  • .7Z - 7-Zip 压缩文件。

  • .GZ - GNU 压缩文件。

  • .RAR - RAR 压缩文件。

  • .TAR - 带存档文件。

  • .ZIP - ZIP 压缩文件。

  • .ZST - Zstandard 压缩文件。

执行文件(可执行程序/安装包)

  • .APK - Android 包文件。

  • .BIN - 二进制文件,常用于固件更新等。

  • .CLASS - Java 字节码文件。

  • .DMG - macOS 磁盘映像文件。

  • .EXE - Windows 可执行文件。

  • .JAR - Java 应用程序存档文件。

  • .MSI - Windows 安装程序。

  • .ISO - 光盘镜像文件。

字体文件

  • .EOT - Embedded OpenType 字体文件。

  • .OTF - OpenType 字体文件。

  • .TTF - TrueType 字体文件。

  • .WOFF, .WOFF2 - Web Open Font Format 字体文件。

脚本与代码文件

  • .CSS - 层叠样式表。

  • .EJS - 嵌入式JavaScript模板引擎文件。

  • .JS - JavaScript 文件。

设计与矢量图形文件

  • .EPS - Encapsulated PostScript 文件。

  • .PICT - Apple PICT 图像文件。

  • .PS - PostScript 文件。

  • .SWF - Shockwave Flash 文件。

缓存配置生效逻辑

节点缓存过期时间功能有四种模式,这四种模式分别具备不同的缓存生效逻辑:

  • 优先遵循源站缓存策略(如果存在),否则使用默认缓存策略:如果源站响应信息中有缓存策略(Cache-Control),则遵循源站的缓存策略;如果源站响应信息中没有缓存策略(Cache-Control),则遵循边缘安全加速 ESA的默认缓存策略。详细的判断逻辑请参见遵循源站缓存策略

  • 优先遵循源站缓存策略(如果存在),否则不缓存:如果源站响应信息中有缓存策略(包括Cache-Control、Expires、Last-Modified、ETag),则遵循源站的缓存策略;如果源站响应信息中没有缓存策略(包括Cache-Control、Expires、Last-Modified、ETag),则不缓存。详细的判断逻辑请参见优先遵循源站缓存策略(如果存在),否则不缓存

  • 不缓存边缘安全加速 ESA节点收到的所有源站响应资源均不缓存。

  • 忽略源站缓存策略,使用自定义缓存过期时间:忽略源站响应信息中的缓存策略(包括Cache-Control、Expires、Last-Modified、ETag),使用边缘安全加速 ESA上设定的缓存过期时间。

遵循源站缓存策略

image

源站响应中包含Cache-Control,遵循源站的缓存策略

源站响应的cache-control缓存策略存在以下两种情况:

  1. cache-control的值为以下任意一种时,表示不缓存。

    • cache-control:no-cache

    • cache-control:no-store

    • cache-control:max-age=0

  2. 源站响应中使用cache-control设置缓存过期时间,取值为max-age或s-maxage,并且max-age或s-maxage的值大于0,例如:cache-control:max-age=3600。如果同时存在max-age和s-maxage,则以s-maxage的值为准。

源站响应中不包含Cache-Control,使用ESA的默认缓存策略

源站响应信息中不包含缓存策略cache-control的情况下,使用边缘安全加速 ESA的默认缓存策略,优先级由高至低为:expires>last-modified>ETag。

  1. 如果源站响应中携带了expires,则使用expires设置过期时间,例如:expires:Tue, 25 Nov 2031 17:25:43 GMT。

  2. 如果源站响应中未携带expires,但是携带了last-modified,则使用以下规则来计算缓存时间:

    • 使用公式(当前时间-last-modified)* 0.1,计算结果在10秒~3600秒及之间的,取计算结果时间;小于10秒的,按照10秒处理;大于3600秒的,按照3600秒处理。

  3. 如果源站响应中只携带了ETag,则缓存10秒。

  4. 源站返回的数据中cache-control、expires、ETag和last-modified等这些缓存相关的响应头都没有携带,则不缓存。

优先遵循源站缓存策略(如果存在),否则不缓存

image

源站缓存策略判断

只判断源站响应信息中是否包含缓存策略cache-control,如果不包含就不缓存;如果包含,源站响应缓存策略cache-control包含以下两种情况:

  1. cache-control:no-cache(或者no-store,或者max-age=0)时,不缓存。

  2. 源站响应中使用cache-control设置过期时间,取值为max-ages-maxage,并且max-ages-maxage的值大于0,例如:cache-control:max-age=3600。如果同时存在max-ages-maxage,则以s-maxage的值为准。

缓存状态响应

ESA边缘节点在返回给客户端的信息中包含响应头X-Site-Cache-Status,这个响应头用于指示客户端请求的资源的缓存状态,下面的表格中包含了所有的缓存状态类型及其说明。

状态

状态说明

HIT

在ESA节点的缓存中找到了该资源,资源未过期,ESA节点将已缓存资源响应给客户端。

MISS

在ESA节点的缓存中找不到该资源,ESA节点从源服务器获取该资源之后响应给客户端。

EXPIRED

在ESA节点的缓存中找到了该资源,但是资源已过期,ESA节点从源服务器获取该资源之后响应给客户端。

STALE

在ESA节点的缓存中找到了该资源,但是资源已过期,ESA节点无法访问源站以检索更新的资源,于是将已过期的缓存资源响应给客户端。包含以下两种情况:

  • 通过缓存规则开启响应过期缓存功能,在源站响应超时或者响应5xx状态码的情况下。

  • 如果ESA设置了优先遵循源站缓存策略,源站响应信息中包含stale-while-revalidate响应头,并且当前未超出stale-while-revalidate响应头设置的时间。

BYPASS

在ESA设置了优先遵循源站缓存策略的情况下,如果源服务器响应Cache-Control:no-cache,或者Cache-Control:no-store,或者Cache-Control:max-age=0。

REVALIDATED

在ESA节点的缓存中找到了该资源,但是资源已过期,ESA节点通过携带If-Modified-Since标头或If-None-Match标头的回源请求对该资源做了重新验证,源站响应Status Code:304 Not Modified,表明该资源未发生变更,ESA节点将已缓存资源响应给客户端。

DYNAMIC

ESA节点认为该资源为动态内容,ESA节点将从源服务器获取该资源之后响应给客户端。包含以下三种情况:

  • 该资源不是默认的静态文件,也不在缓存规则定义的静态请求范围内。

  • 在缓存全局配置中开启了“开发模式”。

  • 在缓存规则中开启了“绕过缓存”。