与“范围”请求标头规范相比,AWS S3返回的“内容范围”不同

时间:2018-09-26 21:53:51

标签: amazon-web-services http amazon-s3 get

我们将带有HTTP Get Requests的“ Range”标头发送到S3,以恢复在此托管的〜3GB应用程序的失败下载。发生了奇怪的行为。在“较低”的完成百分比(0-50%)时,从服务器返回的Content-Range标头与我们要求的完全匹配。但是,在某个特定但尚未确定的点上,返回的Content-Range与我们的请求有所不同。我们总是要求从XYZ字节开始。我还没有时间调试是否存在定义良好的“边界”,然后才会发生此行为,我只能确保它总是在75%之后发生,这是我已经测试了十几次的标记,并且不会发生低于50%

我的问题是这是否是可预期的行为,因为我看不到任何有关此问题的文档。如果是这样,是否有任何资源可以熟悉这种行为,甚至可以防止这种行为?例如,我们要求范围开始于2566960807字节,S3响应了Content-Range:字节1499653561-3227660049。这是一个很大的块,需要重新下载。成功的,先前的部分内容请求的数量似乎无关紧要,例如事先在同一个对象上进行多个或没有“范围”请求(返回“正确”字节范围)的请求时,将经历相同的行为。

如果该信息没有任何意义,那么从初始下载失败(互联网连接中断)到尝试进行远程续集之间的时间只有几秒钟。 (最长约10-20秒)

1 个答案:

答案 0 :(得分:0)

万一有人对解决方案感兴趣,那么问题出奇的愚蠢。我们用于下载的库使用的是.Net 3.5,其中HttWebRequest.AddRange仅支持int。如果超出int范围,则传递长参数会导致转换错误。不得不说,Avira(我们使用其FileDownloader)的实现确实存在问题,将long转换为int不受限制。