为什么当整个文件下载完毕后,S3 有时会返回 HTTP 206?

par*_*y72 2 amazon-s3

我已经让我的 S3 存储桶使用服务器访问日志格式登录到另一个存储桶一段时间了。对于操作:REST.GET.OBJECT,有时会返回HTTP 状态:206 部分内容,因为未下载整个文件。但我可以在日志中看到,有时当返回 HTTP Status: 206 时,整个文件都会被下载。我删除了一些字段以使其更简单:

  • 操作:REST.GET.OBJECT
  • 请求 URI:“GET [文件] HTTP/1.1”
  • HTTP 状态:206
  • 错误代码: -
  • 发送的字节数:76431360
  • 对象大小:76431360
  • 总时间:16276
  • 周转时间:190

这里发生了什么?如果发送的字节数与对象大小相同,那么源如何将其报告为部分内容?

Jok*_*_vD 6

206状态与文件传输不完整无关。服务器在开始发送响应正文之前确定要发送的状态代码,因此它必须预测未来才能知道是否能够发送整个文件。

\n\n

相反,206 状态代码实际上意味着以下三件事同时发生:

\n\n
    \n
  • 客户端Range在其请求中发送标头;
  • \n
  • 服务器决定遵守它并准确发送请求的字节,而不是整个文件;
  • \n
  • 服务器实际上能够这样做 \xe2\x80\x94 该范围是有效且可满足的。
  • \n
\n\n

在这种情况下,标准要求服务器回复 206 状态代码,而不是 200,无论范围恰好覆盖整个文件还是仅覆盖其中的一部分。

\n