You need to enable JavaScript to run this app.
文档中心
对象存储

对象存储

复制全文
下载 pdf
Header 中包含签名
Header 签名概述
复制全文
下载 pdf
Header 签名概述
在 Header 中携带签名时,签名的算法依赖于您上传对象时使用的传输方式。在对象存储 TOS 中,上传文件的传输方式主要分为单分块上传和多分块上传,适用于不同场景下的文件传输需求。​
名词解释​
​
名词​
说明​
校验和(CheckSum)​
校验和是一种数据完整性验证机制,用于检测数据在传输或存储过程中是否发生了错误或意外修改。其核心原理是通过对原始数据执行特定计算,生成一个简短的校验值(即校验和),接收方通过重新计算并比对校验和来判断数据是否被破坏。TOS 目前支持两种校验和:​
  • 基于 Md5 算法计算校验和,添加在 Header 的 Content-MD5 中。​
  • 基于 Sha256 算法计算校验和,添加在 Header 的 x-tos-content-sha256 中。​
TOS V4 基础签名 Header​
基于 TOS V4 签名算法计算出的签名,通过 Authorization 字段携带在 Header 中。详细计算方式见单分块上传的签名机制​
​
单分块上传​
单分块上传指使用单个分块传输全部有效数据的方式。​
​
PUT /objectName HTTP/1.1​
Host: bucketname.tos-cn-beijing.volces.com​
Date: Fri, 30 Jul 2021 08:05:36 GMT​
Authorization: authorization string​
Content-Length: 12​
​
hello world! ​
​
在使用 TOS V4 基础签名进行单分块上传时,支持两种签名计算方式:带校验和的签名和不带校验和的签名。具体说明如下:​
  • 使用带校验和的签名​
  • 您可以将有效数据的校验和纳入到 V4 基础签名计算中,如果数据传输过程中内容或者校验和发生改变,签名校验将失败,从而保证数据传输过程中的安全。​
  • 但是为了提前获取有效数据的校验和,客户端通常需要先将全部数据读入内存以计算校验和,随后,还需要基于校验和进行签名计算,然后在发送数据时,第二次将数据读入内存进行传输,所以这可能会导致客户端性能降低。​
  • 若希望在确保数据完整性的同时避免客户端一次性加载所有数据进行校验和计算,推荐使用多分块上传方式。​
  • 使用不带校验和的签名​
  • 计算 TOS V4 基础签名时,不包含有效数据的校验和。这种方式在非 HTTPS 的场景下无法保证数据完整性,不推荐使用。​
多分块上传​
多分块上传指将有效数据拆分为多个固定长度或者可变长度的分块,然后分别进行上传的方式。​
单个分块的数据组织形式如下:​
​
string(IntHexBase(ChunkSize)) + ";chunk-signature=" + Signature + \r\n + ChunkData + \r\n​
​
  • IntHexBase():用于将整数转化为 16 进制数的函数。例如,若分块大小为 65536,则十六进制字符串为 10000。​
  • ChunkSize:分块有效数据大小(不包含签名和格式数据)。例如,若上传一个 65KB 的对象,并且使用 64 KB 的固定分块大小,那么数据会被分割为三个分块:第一块为 64KB ,第二块为 1KB ,最后一个块为 0 字节。​
  • Signature:分块的签名数据,当使用链式签名时才需设置。​
  • ChunkData:分块有效数据。​
在最后一个有效数据的分块后,需要再写一个包含 0 字节数据的分块,表示结束。基础的多分块数据格式如下:​
​
PUT /objectName HTTP/1.1​
Host: bucketname.tos-cn-beijing.volces.com​
Date: Fri, 30 Jul 2021 08:05:36 GMT​
Authorization: authorization string​
Content-Encoding: tos-chunked​
x-tos-content-sha256: STREAMING-UNSIGNED-PAYLOAD​
x-tos-decoded-content-length: 12​
Content-Length: 25​
​
6​
hello ​
5​
world​
1​
!​
0​
​
在对多分块上传进行签名时,TOS 支持以下签名计算方式:​
  • 只包含 TOS V4 基础签名​
  • 和单分块上传类似,在对多分块上传计算签名时,也可以选择是否在签名中携带校验和。如果选择带校验和的签名,客户端仍需要一次性读取所有数据计算校验和,存在额外的性能损耗。​
  • 包含 TOS V4 基础签名加链式签名​
  • TOS V4 基础签名不携带校验和信息,但是在每个分块数据的开头,会包含分块的签名信息,签名内容包括请求参数、本分块有效数据的校验和以及上一个分块的签名信息。通过边传输边计算的方式,可以有效避免客户端一次性读取所有数据后再计算校验和导致的性能下降,也适用于未知长度的数据上传时,客户端无法提前计算全部数据的校验和,同时又需要保证数据传输安全性的场景。​
多分块上传还支持使用 Trailing Header 的形式,在最后一个分块数据后,携带一份全部有效数据的校验和,用于服务端的数据完整性校验。Trailing Header 和链式签名作为两种不同的方式,都能有效保障传输过程中的安全性,建议用户上传时至少选择其中一种方式,或者两者同时使用。​
在多分块上传时,需要指定 x-tos-content-sha256,用于标识上传格式,以及使用的签名方式。​
​
x-tos-content-sha256 的取值​
说明​
有效数据的 sha256 值​
表示 Header 中包含 TOS V4 基础签名,且 V4 基础签名中包含有效数据的校验和。除此之外,不包含链式签名和 Trailing Header。​
STREAMING-TOS4-HMAC-SHA256-PAYLOAD​
表示 Header 中包含 TOS V4 基础签名,数据中包含基于 HMAC-SHA256 计算的链式签名,数据末尾不包含 Trailing Header。​
STREAMING-TOS4-HMAC-SHA256-PAYLOAD-TRAILER​
表示 Header 中包含 TOS V4 基础签名,数据中包含基于 HMAC-SHA256 计算的链式签名,数据末尾包含 Trailing Header。​
STREAMING-UNSIGNED-PAYLOAD-TRAILER​
表示 Header 中包含 TOS V4 基础签名,数据中不包含链式签名,数据末尾包含 Trailing Header。​
STREAMING-UNSIGNED-PAYLOAD​
表示 Header 中包含 TOS V4 基础签名,数据中不包含链式签名,数据末尾不包含 Trailing Header。​
​
说明​
多分块上传可以和 Transfer-Encoding: chunked 同时使用,若使用 Transfer-Encoding: chunked,则无需携带 Content-Length 头域。​
多分块上传请求示例​
  • 不使用链式签名和 Trailing Header​
  • ​
    PUT /objectName HTTP/1.1​
    Host: bucketname.tos-cn-beijing.volces.com​
    Date: Fri, 30 Jul 2021 08:05:36 GMT​
    Authorization: authorization string​
    Content-Encoding: tos-chunked​
    x-tos-content-sha256: STREAMING-UNSIGNED-PAYLOAD​
    x-tos-decoded-content-length: 12​
    Content-Length: 25​
    ​
    6​
    hello ​
    5​
    world​
    1​
    !​
    0​
    ​
  • 使用链式签名,不使用 Trailing Header。​
  • ​
    PUT /objectName HTTP/1.1​
    Host: bucketname.tos-cn-beijing.volces.com​
    Date: Fri, 30 Jul 2021 08:05:36 GMT​
    Authorization: authorization string​
    Content-Encoding: tos-chunked​
    x-tos-content-sha256: STREAMING-TOS4-HMAC-SHA256-PAYLOAD​
    x-tos-decoded-content-length: 12​
    Content-Length: 342​
    ​
    6;chunk-signature=b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2​
    hello​
    5;chunk-signature=1a7e8d3c0f9b2a5e4d6c7b8a9f0e1d2c3b4a5d6e7f8091a2b3c4d5e6f7a8b9​
    world​
    1;chunk-signature=f42e5c8a3b7d6091e2a4f8c5d7b3a0e6f1c9d2a8b7e4f5c6d3e8a9b0c1d2e3​
    !​
    0;chunk-signature=b6c6ea8a5354eaf15b3cb7646744f4275b71ea724fed81ceb9323e279d449df9​
    ​
  • 不使用链式签名,使用 Trailing Header​
  • ​
    PUT /objectName HTTP/1.1​
    Host: bucketname.tos-cn-beijing.volces.com​
    Date: Fri, 30 Jul 2021 08:05:36 GMT​
    Authorization: authorization string​
    Content-Encoding: tos-chunked​
    x-tos-content-sha256: STREAMING-UNSIGNED-PAYLOAD-TRAILER​
    x-tos-decoded-content-length: 12​
    Content-Length: 56​
    x-tos-trailer: x-tos-hash-crc64ecma​
    ​
    6​
    hello​
    5​
    world​
    1​
    !​
    0​
    x-tos-hash-crc64ecma:smtwW8C72Y8=​
    ​
  • 同时使用链式签名和 Trailing Header​
  • ​
    PUT /objectName HTTP/1.1​
    Host: bucketname.tos-cn-beijing.volces.com​
    Date: Fri, 30 Jul 2021 08:05:36 GMT​
    Authorization: authorization string​
    Content-Encoding: tos-chunked​
    x-tos-content-sha256: STREAMING-TOS4-HMAC-SHA256-PAYLOAD-TRAILER​
    x-tos-trailer: x-tos-hash-crc64ecma​
    x-tos-decoded-content-length: 12​
    Content-Length: 464​
    ​
    6;chunk-signature=b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2​
    hello​
    5;chunk-signature=1a7e8d3c0f9b2a5e4d6c7b8a9f0e1d2c3b4a5d6e7f8091a2b3c4d5e6f7a8b9​
    world​
    1;chunk-signature=f42e5c8a3b7d6091e2a4f8c5d7b3a0e6f1c9d2a8b7e4f5c6d3e8a9b0c1d2e3​
    !​
    0;chunk-signature=b6c6ea8a5354eaf15b3cb7646744f4275b71ea724fed81ceb9323e279d449df9​
    x-tos-hash-crc64ecma:smtwW8C72Y8=​
    x-tos-trailer-signature:41e14ac611e27a8bb3d66c3bad6856f209297767d5dd4fc87d8fa9e422e03faf​
    ​
签名方式​
​
最近更新时间:2026.10.21 16:29:34
这个页面对您有帮助吗?
有用
有用
无用
无用