💡
原文中文,约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 的复杂性,提供一种标准化的内容哈希检查方法。
➡️