使用TOS进行数据上传或下载的过程中,可能会因为公网传输过程中在TOS外部的网络劫持、数据缓存等原因,导致数据不一致等问题。TOS提供了多种数据一致性相关的特性,您可以利用这些特性确保数据上传或下载的一致性。在TOS场景中,数据一致性校验分为上传对象一致性校验以及下载对象一致性校验,本文介绍这两种校验场景下的相关概念及校验方案。
HTTP协议定义的标准请求头域,代表请求消息体数据的指纹值,其计算方式是将数据经过MD5算法计算出哈希值后再经过Base64编码生成字符串。
在TOS场景中,PutObject和UploadPart接口支持在请求头域中携带该参数,PostObject支持在表单域中携带该参数。TOS会以同样的算法计算收到的数据并与该值做比较,如果不匹配则返回上传失败,对象不会在TOS侧生成。
TOS场景定义的请求头域,与Content-MD5类似,同样代表请求消息体数据的指纹值,只是其计算方式使用了更安全的SHA256算法,将数据经过SHA256算法计算出哈希值后再经过Hex编码生成字符串。
PutObject和UploadPart接口支持在请求头域中通过x-tos-content-sha256
携带该参数。
循环冗余校验算法,是业界常用于数据校验的标准算法,详细信息,请参见Cyclic redundancy check。
在TOS场景,PutObject、PostObject、UploadPart、GetObject、HeadObject、CompleteMutipartUpload均会在响应头域中通过x-tos-hash-crc64ecma
字段返回该参数,代表本次读写数据的CRC64校验和。
注意
Range
参数时,响应头域中返回的CRC64仍然是整个对象的CRC64。您可以通过Content-MD5、Content-SHA256或CRC64完成上传对象的一致性校验。不同校验方案的对比说明如下。
校验方式 | 通过Content-MD5 | 通过Content-SHA256 | 通过CRC64 |
---|---|---|---|
适用场景 |
|
|
|
缺点 |
|
| 校验过程在客户端完成,此时TOS侧已生成实际上传的对象,需要额外的做覆盖或删除等清理工作。 |
支持的API |
|
|
|
参考文档 | 通过Content-MD5 | 通过Content-SHA256 | 通过CRC64 |
推荐说明 |
|
您可以利用CRC64实现下载对象的一致性校验,详细说明,请参见校验下载对象的一致性。