

# 使文件失效以删除内容
<a name="Invalidation"></a>

如果您需要在文件过期前从 CloudFront 边缘缓存中删除文件，可以执行下列操作之一：
+ 通过边缘缓存使文件失效。查看器下次请求文件时，CloudFront 将返回源以获取文件的最新版本。
+ 使用文件版本控制以提供具有不同名称的文件的不同版本。有关更多信息，请参阅 [使用版本化文件名更新现有文件](UpdatingExistingObjects.md#ReplacingObjects)。

**Topics**
+ [

## 在使文件失效和使用版本控制的文件名之间进行选择
](#Invalidation_Expiration)
+ [

# 确定使哪个文件失效
](invalidation-access-logs.md)
+ [

# 使文件失效时的需知事项
](invalidation-specifying-objects.md)
+ [

# 使文件失效
](Invalidation_Requests.md)
+ [

# 并发失效请求最大值
](InvalidationLimits.md)
+ [

# 支付文件失效费用
](PayingForInvalidation.md)

## 在使文件失效和使用版本控制的文件名之间进行选择
<a name="Invalidation_Expiration"></a>

要控制从分配提供的文件版本，您可使文件失效或使用版本控制文件名为其命名。如果您希望频繁地更新文件，出于以下原因，建议您主要使用文件版本控制：
+ 即使用户在本地或企业缓存代理中缓存了文件的版本，版本控制也使您能够控制为请求返回哪个文件。如果您使文件失效，用户看到的可能继续是旧版本直至它从这些缓存中过期。
+ CloudFront 访问日志包括文件的名称，因此，版本控制使分析文件变更的结果变得更加轻松。
+ 版本控制提供一种将不同版本的文件提供给不同用户的方式。
+ 版本控制简化了文件修订之间的向前和向后滚动。
+ 版本控制更便宜。您仍需为 CloudFront 支付费用以将文件的新版本传输到边缘站点，但不必为使文件失效支付费用。

有关文件版本控制的更多信息，请参阅[使用版本化文件名更新现有文件](UpdatingExistingObjects.md#ReplacingObjects)。

# 确定使哪个文件失效
<a name="invalidation-access-logs"></a>

如果您要使多个文件失效，例如某个目录中的所有文件或者名称以相同字符开头的所有文件，您可以在失效路径的结尾包含 `*` 通配符。有关使用 `*` 通配符的更多信息，请参阅 [Invalidation paths](invalidation-specifying-objects.md#invalidation-specifying-objects-paths)。

要使文件失效，您可以指定单独文件的路径或以 `*` 通配符结尾的路径，后者可能会应用到一个或多个文件，如以下示例中所示：
+ `/images/image1.jpg`
+ `/images/image*`
+ `/images/*`

如果您想使选定文件失效但用户不必访问源上的每个文件，可确定查看器从 CloudFront 请求了哪些文件并只使这些文件失效。要决定查看器已经请求的文件，请启用 CloudFront 访问日志记录。有关访问日志的更多信息，请参阅 [访问日志（标准日志）](AccessLogs.md)。

# 使文件失效时的需知事项
<a name="invalidation-specifying-objects"></a>

指定要使其失效的文件时，请参考以下信息：

**区分大小写**  
失效路径区分大小写。例如，`/images/image.jpg` 和 `/images/Image.jpg` 指定两个不同的文件。

**使用 Lambda 函数更改 URI**  
如果您的 CloudFront 分配在发生查看器请求事件时触发 Lambda 函数，并且该函数更改请求的文件的 URI，建议您使这两个 URI 失效，以便从 CloudFront 边缘缓存中删除该文件：  
+ 查看器请求中的 URI
+ 函数进行更改后的 URI

**Example 示例**  
假设您的 Lambda 函数将某个文件的 URI 从：  
`https://d111111abcdef8.cloudfront.net/index.html`  
更改为包含语言目录的 URI：  
`https://d111111abcdef8.cloudfront.net/en/index.html`  
要使该文件失效，您必须指定以下路径：  
+ `/index.html`
+ `/en/index.html`
有关更多信息，请参阅 [Invalidation paths](#invalidation-specifying-objects-paths)。

 **默认根对象**  
要使默认根对象（文件）失效，请以您为任何其他文件指定路径相同的方式指定路径。有关更多信息，请参阅 [原定设置根对象的工作原理](DefaultRootObject.md#DefaultRootObjectHow)。

 **转发 Cookie**  
如果您将 CloudFront 配置为将 Cookie 转发到您的源，CloudFront 边缘缓存可能会包含文件的多个版本。当您使文件失效之后，CloudFront 会使文件的所有缓存版本失效，不论其关联的 Cookie 如何。您无法根据关联的 Cookie 选择性地使一些版本失效，而使另一些版本不失效。有关更多信息，请参阅 [根据 Cookie 缓存内容](Cookies.md)。

 **转发标头**  
如果您将 CloudFront 配置为将标头列表转发到源并基于标头的值进行缓存，CloudFront 边缘缓存可能会包含文件的多个版本。当您使文件失效之后，CloudFront 会使文件的所有缓存版本失效，而不论标头值如何。您无法根据标头值选择性地使一些版本失效，而使另一些版本不失效。（如果您将 CloudFront 配置为将所有标头转发到源，则 CloudFront 不会缓存您的文件。） 有关更多信息，请参阅 [根据请求标头缓存内容](header-caching.md)。

 **转发查询字符串**  
如果您将 CloudFront 配置为将查询字符串转发到您的源，在使文件失效时，必须包括查询字符串，如下例中所示：  
+ `/images/image.jpg?parameter1=a`
+ `/images/image.jpg?parameter1=b`
如果客户端请求包括针对同一个文件的五个不同查询字符串，您可以使文件失效五次（每个查询字符串一次），或者您可以在失效路径中使用 \$1 通配符，如下例中所示：  
`/images/image.jpg*`  
有关在失效路径中使用通配符的更多信息，请参阅 [Invalidation paths](#invalidation-specifying-objects-paths)。  
有关查询字符串的更多信息，请参阅 [根据查询字符串参数缓存内容](QueryStringParameters.md)。  
要确定哪个查询字符串正在使用中，您可启用 CloudFront 日志记录。有关更多信息，请参阅 [访问日志（标准日志）](AccessLogs.md)。

**允许的最大值**  
有关允许的最大失效次数的信息，请参阅[并发失效请求最大值](InvalidationLimits.md)。

 **Microsoft Smooth Streaming 文件**  
为对应的缓存行为启用 Smooth Streaming 时，您不能使 Microsoft Smooth Streaming 格式的媒体文件失效。

 **路径中的非 ASCII 或不安全字符**  
如果路径包含非 ASCII 字符或 [RFC 1738](https://tools.ietf.org/html/rfc1738) 中定义的不安全字符，请对这些字符进行 URL 编码。切勿对路径中的任何其他字符进行 URL 编码，否则，CloudFront 将不会使已更新文件的旧版本失效。  
请勿在路径中使用 `~` 字符。CloudFront 不支持使用此字符来实施失效，无论它是否经过 URL 编码。

 **失效路径**  
路径是相对于分配的。例如，要使 `https://d111111abcdef8.cloudfront.net/images/image2.jpg` 处的对象失效，您可指定 `/images/image2.jpg`。  
在 [CloudFront 控制台](https://console.aws.amazon.com/cloudfront/v4/home)中，您可以省略路径中的前导斜杠，如下所示：`images/image2.jpg`。在直接使用 CloudFront API 时，失效路径必须以前导斜杠开头。
您还可以使用 `*` 通配符使多个文件同时失效。`*` 将替换 0 个或多个字符，必须是失效路径中最后的字符。  
要在失效中使用通配符（\$1），必须将通配符放在路径的末尾。在其它任何地方插入的星号（\$1）会被视为文本字符匹配，而不是通配符失效。
如果您使用 AWS Command Line Interface（AWS CLI）使文件失效，并且指定一个包含 `*` 通配符的路径，则必须使用引号（`"`）将路径引起来，例如 `"/*"`。  
路径的长度上限是 4000 个字符。  

**Example 示例：使路径失效**  
+ 使目录中的所有文件失效：

  `/`*directory-path*`/*`
+ 使目录、其所有子目录以及该目录和子目录中的所有文件失效：

  `/`*directory-path*`*`
+ 使具有相同名称但文件扩展名不同的所有文件失效 (例如 logo.jpg、logo.png 和 logo.gif)：

  `/`*directory-path*`/`*file-name*`.*`
+ 使目录中文件名以相同字符开头的所有文件失效 (例如 HLS 格式的视频的所有文件) 而不论扩展名如何：

  `/`*directory-path*`/`*initial-characters-in-file-name*`*`
+ 当您将 CloudFront 配置为基于查询字符串参数进行缓存并且希望使某个文件的所有版本失效时：

  `/`*directory-path*`/`*file-name*`.`*file-name-extension*`*`
+ 使分配中的所有文件失效：

  `/*`
有关使用 Lambda 函数更改 URI 时使文件失效的信息，请参阅[Changing the URI Using a Lambda Function](#invalidation-lambda-at-edge)。  
如果失效路径为目录且您对指定目录的方法尚未标准化 (带或不带尾部斜杠 /)，建议您使带和不带尾部斜杠的目录均失效，例如，`/images` 和 `/images/`。

**已签名的 URL**  
如果您正在使用签名 URL，可以通过在问号 (?) 前仅包括部分 URL 来使文件失效。

# 使文件失效
<a name="Invalidation_Requests"></a>

您可以使用 CloudFront 控制台来创建并运行失效、显示您先前提交的失效列表以及有关单个失效的详细信息。您还可复制现有的失效、编辑文件路径列表并运行已编辑的失效。您无法从列表中删除失效。

**Contents**
+ [

## 使文件失效
](#invalidating-objects-console)
+ [

## 复制、编辑和重新运行现有失效
](#invalidating-objects-copy-console)
+ [

## 取消失效
](#canceling-invalidations)
+ [

## 列出失效
](#listing-invalidations-console)
+ [

## 显示有关失效的信息
](#invalidation-details-console)

## 使文件失效
<a name="invalidating-objects-console"></a>

要使用 CloudFront 控制台使文件失效，请执行以下操作。

------
#### [ Console ]<a name="invalidating-objects-console-procedure"></a>

**使文件失效（控制台）**

1. 登录 AWS 管理控制台，并通过以下网址打开 CloudFront 控制台：[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

1. 选择您想为其使文件失效的分配。

1. 选择**失效**选项卡。

1. 选择**创建失效**。

1. 对于您希望使其失效的文件，请在每行输入一个失效路径。有关指定失效路径的信息，请参阅 [使文件失效时的需知事项](invalidation-specifying-objects.md)。
**重要**  
请谨慎指定文件路径。在启动之后，您无法取消失效请求。

1. 选择**创建失效**。

------
#### [ CloudFront API ]

要了解如何使对象失效以及显示失效相关信息，请参阅《Amazon CloudFront API 参考》**中的以下主题：
+ [CreateInvalidation](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateInvalidation.html) 
+ [ListInvalidations](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListInvalidations.html)
+ [GetInvalidation](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetInvalidation.html)

**注意**  
如果您使用 AWS Command Line Interface（AWS CLI）使文件失效，并且指定了一个包含 `*` 通配符的路径，则必须使用引号（`"`）将路径引起来，如以下所示：  

```
aws cloudfront create-invalidation --distribution-id distribution_ID --paths "/*"
```

------

## 复制、编辑和重新运行现有失效
<a name="invalidating-objects-copy-console"></a>

您可复制您先前创建的失效、更新失效路径列表以及运行已更新的失效。您不可复制现有失效、更新失效路径，然后在不运行已更新失效的情况下将其保存。

**重要**  
如果您复制仍在进行中的失效、更新失效路径列表，然后运行已更新的失效，则 CloudFront 不会停止或删除您复制的失效。如果任何失效路径出现在原本和副本中，CloudFront 将尝试使文件失效两次，且两次失效均计入到您每月免费失效的最大数目中。如果您已经达到了免费失效的最大数目，将会向您收取每个文件两次失效的费用。有关更多信息，请参阅 [并发失效请求最大值](InvalidationLimits.md)。<a name="invalidating-objects-copy-console-procedure"></a>

**复制、编辑及重新运行现有失效**

1. 登录 AWS 管理控制台，并通过以下网址打开 CloudFront 控制台：[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

1. 选择包含要复制的失效的分配。

1. 选择**失效**选项卡。

1. 选择您想复制的失效。

   如果您不确定要复制哪个失效，可以选择某个失效，然后选择**查看详细信息**以显示该失效的详细信息。

1. 选择**复制到新项目**。

1. 更新失效路径列表 (如适用)。

1. 选择**创建失效**。

## 取消失效
<a name="canceling-invalidations"></a>

当您将失效请求提交到 CloudFront 时，CloudFront 会在几秒钟内将该请求转发到所有边缘站点，每个边缘站点将立即开始处理失效。因此，一旦提交失效便无法取消它。

## 列出失效
<a name="listing-invalidations-console"></a>

通过使用 CloudFront 控制台，您可显示您已为分配创建和运行的最后 100 个失效的列表。如果您想获得超过 100 个失效的列表，请执行 `ListInvalidations` API 操作。有关更多信息，请参阅《Amazon CloudFront API 参考》**中的 [ListInvalidations](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListInvalidations.html)。<a name="listing-invalidations-console-procedure"></a>

**列出失效**

1. 登录 AWS 管理控制台，并通过以下网址打开 CloudFront 控制台：[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

1. 选择您要为其显示失效列表的分配。

1. 选择**失效**选项卡。

**注意**  
您无法从列表中删除失效。

## 显示有关失效的信息
<a name="invalidation-details-console"></a>

您可显示失效的详细信息，包括分配 ID、失效 ID、失效状态、创建失效的日期和时间以及完整的失效路径列表。<a name="invalidation-details-console-procedure"></a>

**显示有关失效的信息**

1. 登录 AWS 管理控制台，并通过以下网址打开 CloudFront 控制台：[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

1. 选择包含您要为其显示详细信息的失效的分配。

1. 选择**失效**选项卡。

1. 选择适用的失效 ID 或选择失效 ID，然后选择**查看详细信息**。

# 并发失效请求最大值
<a name="InvalidationLimits"></a>

如果您想逐个让文件失效，则针对每个分配一次可以同时处理 3000 个文件的无效请求。一个无效请求可以支持最多 3000 个文件，或针对一个文件的 3000 个请求，或者合计不超过 3000 个文件的任何组合方式。例如，您可以提交 30 个失效请求，每个请求使 100 个文件失效。只要全部 30 个失效请求仍在进行中，您无法继续提交任何失效请求。如果超出最大值，CloudFront 将返回一条错误消息。

如果您使用 \$1 通配符，则一次最多可以提出 15 个无效路径请求。您一次可以为每个分配的最多 3000 个单独文件提出失效请求，而允许的通配符无效请求的最大值与个别使文件失效的最大值无关。

# 支付文件失效费用
<a name="PayingForInvalidation"></a>

您每月提交的前 1000 个失效路径免费；每月超过 1000 个之后，您须为每个失效路径支付费用。一个失效路径可以针对单个文件（如 `/images/logo.jpg`），也可针对多个文件（如 `/images/*`）。一个包括 `*` 通配符的路径计数为一个路径，即使该路径导致 CloudFront 使数千个文件失效。

每月 1000 个免费失效路径的最大值适用于您通过一个 AWS 账户创建的所有分配的失效路径总数。例如，如果您使用 AWS 账户 `john@example.com` 创建了三个分配，并在给定月份里为*每个分配*提交了 600 个失效路径（总共 1800 个失效路径），那么 AWS 将针对总无效路径与 1000 个免费限制之间的差值向您收费。在此示例中，AWS 将向您收取当月内 800 个失效路径的费用。

不论您要使之失效的文件的数量是多少（单个文件 (`/images/logo.jpg`) 或是与分配关联的所有文件 (`/*`)），提交失效路径的费用均相同。由于在失效请求中，您需要按路径付费，因此即使您将多个路径捆绑到一个请求中，出于计费目的，每个路径仍会单独计数。

有关失效定价的更多信息，请参阅 [Amazon CloudFront 定价](https://aws.amazon.com/cloudfront/pricing/)。有关失效路径的更多信息，请参阅 [Invalidation paths](invalidation-specifying-objects.md#invalidation-specifying-objects-paths)。