缓存失效操作概览

本页面概述了 Cloud CDN 缓存失效操作。

什么是缓存失效操作?

对象被缓存后,它通常会保留在缓存中,直到对象过期或被逐出(以便为新内容腾出空间)。您可以通过标准 HTTP 标头控制过期时间。

您可能希望在正常过期时间之前从缓存中移除对象。您可以通过发出缓存失效操作请求来强制缓存忽略一个对象或一组对象。

在发出此类请求之前,您必须确保源站服务器返回的是正确的内容。否则,当 Cloud CDN 再次请求内容时,它可能会缓存错误的内容。

路径模式

每个失效操作请求都会指定一个路径模式,用来标识应当失效的一个对象或一组对象。路径模式可以是具体路径(例如 /cat.jpg),也可以是整个目录结构(例如 /pictures/*)。路径模式需要遵循以下规则:

  • 路径模式必须以 / 开头。
  • 它不能包含 ?#
  • 它只能将 * 用作 / 之后的最后一个字符。
  • 如果以 /* 结尾,则前面的字符串是一个前缀,路径以该前缀开头的所有对象都将失效。

路径模式类似于网址的路径部分,后者是主机名与可能存在的 ?# 之间的所有内容。

如果您的网址包含查询字符串,例如 /images.php?image=fred.png,则您不能选择性地让只有查询字符串不同的对象中的一部分失效。例如,如果您有 /images.php?image=fred.png/images.php?image=barney.png 两张图片,则不能仅使 fred.png 失效。要使 images.php 传送的所有图片失效,请使用 /images.php 作为路径模式。

使单个主机的缓存失效

通常情况下,缓存失效操作会使所有主机名的相应路径失效。例如,如果您将 example.comexample2.com 指向同一负载平衡器,并且使 /images/cat.jpg 失效,则 example.com/images/cat.jpgexample2.com/images/cat.jpg 都将失效。

您可以在命令中添加 --host 标志,以将失效操作限制在一个主机的范围内。

限制

失效操作只应在特殊情况下使用,不应是您的正常工作流的一部分。失效操作不会影响 Web 浏览器缓存或第三方互联网服务提供商运行的缓存中的缓存副本。

作为常规失效方法的替代方案,您可以主动为响应设置适当的过期时间,或为不同版本的内容使用不同的网址。如需详细了解过期时间,请参阅过期时间和验证请求

失效操作的速率受限。您每分钟最多可以提交一次失效操作。但是,失效操作的大小并不受限。失效 /images/fred.png 计为一次失效操作。失效 /images/* 也计为一次失效操作。

请仅对必要的内容执行失效操作,这是因为,如果让太多缓存内容失效,可能会导致之前由这些缓存处理的大量请求突然涌向您的实例或存储分区。

由于 Cloud CDN 是一个分布式系统,因此,有时即使少量缓存尚未失效,Cloud CDN 也可能会报告失效操作已完成。这种情况非常罕见,并且系统会自动进行更正。

使用共享 VPC 跨项目服务引用请求缓存失效操作

如果您使用的是具有共享 VPC 跨项目服务引用的全局外部应用负载平衡器,则默认情况下,服务项目管理员没有请求缓存失效操作所需的权限。这是因为缓存失效操作在前端项目(即包含转发规则、目标代理和负载均衡器的网址映射的项目)中进行配置。因此,缓存失效操作只能由具有 IAM 角色的主账号发出,以在前端项目中配置负载均衡器相关资源(例如 Compute Network Admin 角色)。

在单独项目中控制后端服务预配的服务管理员必须与前端项目的负载均衡器管理员合作,为其跨项目服务发出缓存失效操作。

后续步骤