

# 使用删除标记
<a name="DeleteMarker"></a>

Amazon S3 中的*删除标记*是用于在简单 `DELETE` 请求中指定的、启用了版本控制的对象的占位符（或标记）。简单 `DELETE` 请求是指未指定版本 ID 的请求。因为对象位于已启用版本控制的存储桶中，所以不能删除该对象。但是，删除标记可以使 Amazon S3 的行为类似于对象已被删除。在删除标记上可以使用 Amazon S3 API `DELETE` 调用。为此，您必须使用具有适当权限的 AWS Identity and Access Management (IAM) 用户或角色来发出 `DELETE` 请求。

与任何其他对象一样，删除标记同样有*键名*（或*键*）和版本 ID。但是，删除标记在以下方面与其他对象不同：
+ 删除标记没有与之关联的数据。
+ 删除标记不与访问控制列表 (ACL) 值关联。
+ 如果您针对删除标记发出 `GET` 请求，则 `GET` 请求不会检索任何内容，因为删除标记没有数据。具体而言，如果您的 `GET` 请求未指定 `versionId`，则会收到 404（未找到）错误。

删除标记会对 Amazon S3 中的存储产生极少的费用。删除标记的存储大小等于删除标记键名的大小。键名是 Unicode 字符序列。对于名称中的每个字符，键名的 UTF-8 编码将 1 到 4 字节的存储添加到存储桶中。删除标记存储在 S3 Standard 存储类中。

如果您想知道自己有多少个删除标记以及它们存储在哪个存储类中，可以使用 Amazon S3 Storage Lens 存储统计管理工具。有关更多信息，请参阅[使用 Amazon S3 Storage Lens 存储统计管理工具监控您的存储活动和使用情况](storage_lens.md)和[Amazon S3 Storage Lens 存储统计管理工具指标词汇表](storage_lens_metrics_glossary.md)。

有关键名称的更多信息，请参阅 [为 Amazon S3 对象命名](object-keys.md)。有关将删除标记删除的信息，请参阅 [管理删除标记](ManagingDelMarkers.md)。

仅 Amazon S3 可以创建删除标记，且当您在已启用版本控制或已暂停版本控制的存储桶的对象上发送 `DeleteObject` 请求时执行此操作。在 `DELETE` 请求中指定的对象不会实际删除。而是使删除标记成为对象的当前版本。该对象的键名（键）将成为删除标记的键。

如果您获取对象而未在请求中指定 `versionId`，如果其当前版本是一个删除标记，则 Amazon S3 的响应如下：
+ 404（未找到）错误
+ 响应标头，`x-amz-delete-marker: true`

当您通过在请求中指定 `versionId` 来获取对象时，如果其当前版本是一个删除标记，则 Amazon S3 的响应如下：
+ 405（不允许此方法）错误
+ 响应标头，`x-amz-delete-marker: true`
+ 响应标头，`Last-Modified: timestamp`（仅在使用 [HeadObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html) 或 [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) API 操作时）

`x-amz-delete-marker: true` 响应标头告知您所访问的对象是删除标记。此响应标头永远不会返回 `false`，因为当值为时 `false`，对象的当前版本或指定版本不是删除标记。

`Last-Modified` 响应标头提供删除标记的创建时间。

下图显示了对当前版本为删除标记的对象进行 `GetObject` API 调用时，该调用如何使用 404（未找到）错误进行响应且响应标头中包括 `x-amz-delete-marker: true`。

![\[图中显示了对删除标记的 GetObject 调用返回 404（未找到）错误。\]](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/images/versioning_DELETE_NoObjectFound.png)


如果您通过在请求中指定 `versionId` 来对对象进行 `GetObject` 调用，并且指定的版本是删除标记，则 Amazon S3 会以 405（不允许方法）错误进行响应，且响应标头包括 `x-amz-delete-marker: true` 和 `Last-Modified: timestamp`。

![\[图中显示了对删除标记的 GetObject 调用返回 405（不允许此方法）错误。\]](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/images/versioning_DELETE_NoObjectFound_405.png)


即使被覆盖，删除标记也仍保留在对象版本中。列出删除标记（和对象的其它版本）的唯一方法是使用 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html) 请求。可以在 AWS 管理控制台中通过列出通用存储桶中的对象并选择**显示版本**来提出此请求。有关更多信息，请参阅 [列出启用版本控制的存储桶中的对象](list-obj-version-enabled-bucket.md)。

下图显示 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) 或 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html) 请求不会返回其当前版本为删除标记的对象。

![\[图中显示了 ListObjectsV2 或 ListObjects 调用如何不返回任何删除标记。\]](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/images/versioning_GETBucketwithDeleteMarkers.png)
