为什么 S3 ETag 有额外的字符?

Ell*_*t B 5 amazon-s3 amazon-web-services

我使用 s3api put-object 上传了一个带有 aws cli 的文件,响应如下:

{
    "ETag": "\"7bd173e5150f57f8ffe94ad61cd5ea9d\""
}
Run Code Online (Sandbox Code Playgroud)

当我用 md5 在本地计算散列时,我得到了这个:

173e5150f57f8ffe94ad61cd5ea9d
Run Code Online (Sandbox Code Playgroud)

为什么 ETag 前面多出 3 个字符?这是一个小文件 (8KB),因此它是单部分上传。

Mic*_*bot 10

它实际上没有 2 个额外的字符。这里发生了两件事。

ETag 需要引号括起来",因此对象的 ETag 是"7bd173e5150f57f8ffe94ad61cd5ea9d"-- 引号是 ETag 的一部分。

并且,此输出是JSON,其中字符串需要包装在"... 因此"字符串中的字符必须用反斜杠转义 - 例如 5 个字符的字符串"foo"(显示的引号字符是字符串本身的一部分) ,而不是简单地包含字符串),在 JSON 中表示为"\"foo\"".