amazon-s3 - 为什么 S3 在下载整个文件后有时会返回 HTTP 206?
问题描述
我已经让我的 S3 存储桶使用服务器访问日志格式登录到另一个存储桶有一段时间了。对于操作:REST.GET.OBJECT 有时会返回HTTP 状态:206 部分内容,因为没有下载整个文件。但我可以在日志中看到,有时当返回 HTTP Status: 206 时,整个文件都已下载。我删除了一些字段以使其更简单:
- 操作:REST.GET.OBJECT
- 请求 URI:“GET [文件] HTTP/1.1”
- HTTP 状态:206
- 错误代码: -
- 发送字节数:76431360
- 对象大小:76431360
- 总时间:16276
- 周转时间:190
这里发生了什么?如果发送的字节与对象大小相同,那么源如何将其报告为部分内容?
解决方案
206 状态与文件传输不完整无关。服务器在开始发送响应正文之前确定要发送的状态代码,因此它必须预测未来才能知道它是否能够发送整个文件。
相反,206 状态码实际上意味着以下三件事同时发生:
Range
客户端在其请求中发送了标头;- 服务器决定尊重它并准确发送请求的字节,而不是整个文件;
- 服务器实际上能够这样做 - 范围是有效且可满足的。
在这种情况下,标准要求服务器回复 206 状态码,而不是 200,无论该范围恰好覆盖整个文件还是仅覆盖文件的一部分。
推荐阅读
- wordpress - WP_PROXY_HOST 是否支持 https/socks5 代理?
- html - 当我在 Expo (iOS) 中使用 Print API 打印 html 时,html 中的分页符无法按预期工作
- python - 我如何以及在哪里可以在 pyassimp 中找到正确的网格数据?
- sql - 为什么我在第 3 行出现错误:ORA-00907:使用 IDENTITY 时我的 SQL 中缺少右括号
- r - 如何在 dplyr r 中进行条件分组和汇总
- java - Spring Boot RESTful——三层架构
- flutter - AutomaticKeepAliveClientMixin 的终止状态
- javascript - 应用过滤器时数据源突然丢失
- python - mysql.connector.errors.ProgrammingError: 1064 (42000): 你的 SQL 语法有错误;在第 1 行的 ')' 附近使用正确的语法
- c# - 在 C# 中委派异步行为的模式