使用删除标记
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 存储统计管理工具评估您的存储活动和使用情况 和Amazon S3 Storage Lens 存储统计管理工具指标词汇表。
有关键名称的更多信息,请参阅 为 Amazon S3 对象命名。有关将删除标记删除的信息,请参阅 管理删除标记。
仅 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 或 GetObject API 操作时)
x-amz-delete-marker: true
响应标头告知您所访问的对象是删除标记。此响应标头永远不会返回 false
,因为当值为时 false
,对象的当前版本或指定版本不是删除标记。
Last-Modified
响应标头提供删除标记的创建时间。
下图显示了对当前版本为删除标记的对象进行 GetObject
API 调用时,该调用如何使用 404(未找到)错误进行响应且响应标头中包括 x-amz-delete-marker: true
。
如果您通过在请求中指定 versionId
来对对象进行 GetObject
调用,并且指定的版本是删除标记,则 Amazon S3 会以 405(不允许方法)错误进行响应,且响应标头包括 x-amz-delete-marker: true
和 Last-Modified: timestamp
。
列出删除标记(和对象的其他版本)的唯一方法在 versions
请求中使用 ListObjectVersions 子资源。下图显示 ListObjectsV2 或 ListObjects 请求不会返回其当前版本为删除标记的对象。