2021-16: 对象存储的 ETag

2021-16: 对象存储的 ETag

💡 原文中文,约1400字,阅读约需4分钟。
📝

内容提要

ETag 用于区分资源版本,其生成方式由实现决定,常见算法为 MD5。不同的上传方式(如分段上传)可能导致 ETag 不同,开发时需谨慎处理这些细节。

🎯

关键要点

  • ETag 用于区分资源版本,生成方式由实现决定,常见算法为 MD5。
  • ETag 的语义是区分资源的不同版本,可以是内容的 Hash、最后修改时间的 Hash 或自定义版本号。
  • 对象存储的上传方式包括 PostObject、PutObject、Append Object、Multipart Uploads、Block Uploads 和 Page Uploads。
  • PostObject 和 PutObject 通常限制最大 5GB,上传时可以计算 Hash 并写入元数据。
  • 绝大多数对象存储服务使用 MD5 算法,但其他上传方式的 ETag 不一定是 MD5。
  • 分段上传时,常见做法是组合每个 Part 的 ETag 来计算 MD5。
  • 开发应用时需谨慎处理 ETag,不能简单视为对象内容的 Content-MD5。
  • go-storage 提出了 Normalize content hash check 草案以应对 ETag 的复杂性。

延伸问答

ETag 是什么,它的主要用途是什么?

ETag 是用于区分资源版本的标识,主要用于识别不同版本的资源。

ETag 的生成方式有哪些?

ETag 的生成方式可以是内容的 Hash、最后修改时间的 Hash 或自定义版本号,具体由实现决定。

不同的上传方式如何影响 ETag 的生成?

不同的上传方式(如 PostObject、PutObject、Multipart Uploads 等)可能导致生成的 ETag 不同,尤其是分段上传时。

为什么不能简单地将 ETag 视为对象内容的 Content-MD5?

因为 ETag 的生成方式可能与内容的 MD5 不同,尤其在使用分段上传时,ETag 的计算方式更复杂。

在开发应用时需要注意哪些关于 ETag 的细节?

开发时需谨慎处理 ETag,特别是在不同上传方式下,不能简单假设其为内容的 MD5。

go-storage 提出的 Normalize content hash check 草案是什么?

该草案旨在应对 ETag 的复杂性,提供一种标准化的内容哈希检查方法。

➡️

继续阅读