CNN 一次性包装失败

在另一个 Discourse 论坛上,@sam 建议我在这里提交一个 Bug 报告:CNN 文章的 oneboxing(一键预览)似乎存在(至少是)间歇性故障。鉴于这是一个知名网站,这似乎相当重要。目前尚不清楚是速率限制问题、用户代理阻止、Discourse 端问题、oEmbed 数据实际存在问题,还是其他原因。

示例:

(因新用户限制,已移除其他示例。)

4 个赞

您好 @wazroth :wave: 欢迎来到 Meta。 :slight_smile: 感谢您的报告。

是的,我已经能在我的开发实例和托管站点上重现此问题。CNN 链接根本无法 onebox。

3 个赞

感谢 @wazroth,我们已安排在未来 4 周内调试此问题。

4 个赞

@ted 你还记得为什么我们在 SECURITY: Prevent Onebox cache overflow by limiting downloads and URL… · discourse/discourse@95a82d6 · GitHub 中将 onebox 的 max_download_kb 从 10mb 减少到 2mb 吗?

报告的 CNN 链接没有被 onebox,因为响应大小为 2.7mb,大于当前的 2mb 限制。我们可以通过提高默认大小来解决这个问题,但我想更好地了解这样做的风险。

4 个赞

嗯,另外……跟进一下,我们所需的所有信息不都在最初的 2MB 里面吗?

2 个赞

另请参阅 https://meta.discourse.org/t/amazon-onebox-broken/307120,可能相关?

这个 max_download_kb 设置是硬编码的吗?我无法通过管理菜单更改它,对吗?

这取决于 onebox 引擎。像 Amazon 这样的某些 onebox 引擎会抓取 <body> 内的某些信息,例如商品的价格。对于 opengraph 引擎,理论上我们只需要 head 中的某些标签,例如 <meta>

最有效的方法是在流式传输响应时解析响应以获取必要的信息,但要更改我们所有的引擎来执行此操作可能会付出相当大的努力,并且是一个更复杂的解决方案。

实际上,我们用来解析 HTML 响应的 Nokogiri 能够解析不完整的 HTML 文本,因此在响应过大时无需丢弃整个响应。我认为我们可以继续将响应体限制在 2mb,如果响应大小超过该限制,我们只需尝试解析前 2mb。

1 个赞

这已通过以下方式修复:

在本地,当我们在尝试 onebox 时,此主题中报告的“有问题”的 URL 不再显示错误。

5 个赞

太棒了,谢谢 @tgxworld :smiley:

2 个赞