# Onebox 无法处理大于 5MB 的视频：服务器返回 200 OK 而非 206 Partial Content

**URL:** https://meta.discourse.org/t/onebox-failed-for-videos-5mb-servers-returning-200-ok-instead-of-206-partial-content/395007
**Category:** Support
**Created:** [2026 年2 月 3 日 06:15 UTC](https://meta.discourse.org/t/onebox-failed-for-videos-5mb-servers-returning-200-ok-instead-of-206-partial-content/395007 "2026-02-03T06:15:44Z")
**Posts on this page:** 1
**Showing post:** 1

<div class="post-metadata">

### Author: ![copymonopoly](https://avatars.discourse-cdn.com/v4/letter/c/4491bb/32.png) [@copymonopoly](https://meta.discourse.org/u/copymonopoly)
#### Post date: [2026 年2 月 3 日 06:15 UTC](https://meta.discourse.org/t/onebox-failed-for-videos-5mb-servers-returning-200-ok-instead-of-206-partial-content/395007/1 "2026-02-03T06:15:45Z")

</div>

大家好，

我遇到了一个特定问题：我的 Discourse 实例（标准的 Docker 安装）上，大于 5MB 的视频无法生成 Onebox 预览，而相同的视频链接在其他 Discourse 站点上工作得非常完美。

**问题：**  
当我发布一个视频链接（例如一个 5.1MB 的 .webm 文件）时，Onebox 失败了。我已经将问题隔离到 Range 请求协商失败。

**从 Rails 控制台得到的调试结果：**

- **手动 Ruby 测试（成功）：** 使用标准的 `Net::HTTP` 并手动设置 `Range: bytes=0-10` 标头，我成功地从源服务器获得了 **206 Partial Content** 响应。
- **Discourse 系统测试（失败）：** 当 Discourse 尝试通过 `FinalDestination.new(url).get` 获取同一 URL 时，它收到了 **200 OK** (Net::HTTPOK) 响应，而不是 206。因此，它尝试下载整个文件，达到了 5MB 的 `MAX_REQUEST_SIZE_BYTES` 限制，Onebox 以“大小超出限制”错误失败。

**我已经测试了以下配置，但问题仍然存在：**

1. 在 `onebox_user_agent` 中设置了类似浏览器的字符串。
2. 将源域添加到 `force_custom_user_agent_hosts`。
3. 验证服务器没有配置全局代理（`env | grep -i proxy` 为空）。
4. 在其他 Discourse 实例上测试了相同的 URL，它们可以完美地 Onebox。

**问题：**  
为什么一个 Discourse 实例无法协商 Range 请求（206），而指向完全相同 URL 的另一个实例在同一网络上却能成功？

是否有任何特定的内部配置、安全中间件或 `FinalDestination` 逻辑可能会剥离 `Range` 标头或导致远程服务器回退到完整的 200 响应？

非常感谢任何见解或下一步的查找方向！

---

_[View the full topic](https://meta.discourse.org/t/onebox-failed-for-videos-5mb-servers-returning-200-ok-instead-of-206-partial-content/395007)._
