

# 使文件失效时的需知事项
<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 来使文件失效。