【问题标题】:403. That’s an error - Rate-limit exceeded That’s all we know - Image from YouTube Data API403. 这是一个错误 - 超出速率限制这就是我们所知道的 - 图片来自 YouTube 数据 API
【发布时间】:2017-02-07 17:35:44
【问题描述】:

我创建了一个网站,该网站使用 YouTube 数据 API 来获取选定用户的 YouTube 数据。这对我来说一直很有效,但现在的流量已经达到嵌入 YouTube 图片不再是 100% 可靠的水平。

我使用 YouTube Data API V3 来获取 YouTube 横幅图像的图像 URL,然后将其添加为现有 <img> 元素的 src 属性。

由于该网站的流量非常大(主要是 500-3000 名实时用户),当我的服务器发送到许多(图像)GET 请求时,YouTube 图像服务器(例如:https://yt3.ggpht.com)开始返回 403 错误。错误如下所示:


  1. 这是一个错误。

您的客户端无权从此服务器获取 URL https://yt3.ggpht.com/Xs3rhrNjuGoNnd6aXPdZqdfiOIp5EbvN9-PYSaP8xTY1cx6Ced5No6sHNZupNrQmsidY2W-X=w2560-fcrop64=1,00005a57ffffa5a8-nd-c0xffffffff-rj-k-no。 (客户端IP地址:xx.xx.xxx.xxx)

超出速率限制这就是我们所知道的。


从超出此限制的那一刻起,我的网站在一段时间内(来自 YouTube 图像服务器)没有显示任何图像,并且在 x 分钟后超出的限制被重置,图像再次工作。我想防止这种情况发生,因为 YouTube 横幅图片对我网站的用户体验很重要。

我的第一个问题:有谁知道这个 YouTube 图片的速率限制的确切数字是多少? X 时间内可以完成多少个请求?

我的第二个问题:有谁知道防止触发此错误并仍向每个用户提供 YouTube 图片的解决方案?

我有一些自己的理论,但它们会对我的服务器产生很大影响:

  • 由于速率限制绑定到 IP 地址,我可以使用某种负载平衡器在多个 IP 上运行我的网站。
  • 我可以在第一次请求图像时将图像保存到我的服务器作为缓存机制。当图像再次被请求时,我可以从我自己的服务器上提供它,这样可以防止超出限制。为了防止更新的 YouTube 图片不显示,我必须每 X 小时删除一次图片。

我宁愿不这样做,因为这两种理论都会对服务器负载产生很大影响。

提前感谢您分享您的知识!

彼得

【问题讨论】:

  • 这里有同样的问题。我注意到 SocialBlade 以与购买相同的方式加载图像而没有问题。我不明白为什么会这样……有什么建议吗?
  • 编辑:SocialBlade 也确实遇到了同样的问题

标签: limit youtube-data-api rate


【解决方案1】:

我知道这个问题很老了,我搜索了 StackOverflow 并没有一个像样的解决方案,但是当我根据 @Floatingpurr 的回答遇到这个问题时,我设法找到了解决方案。

您的两种理论都可以在实践中发挥作用,但正如您所提到的,这需要大量工作。您可以将referrerPolicy="no-referrer" 添加到您的img 标记中,它应该在没有引用标头的情况下发出请求,从而使请求不再返回403。

我的假设是,您和我自己一样在具有流行端口的本地服务器上运行,Google/Youtube 的图像服务器根据 referrer 标头计算速率限制(虽然这是一种非常糟糕的方法,但基于获得 200 VS 403 的图像请求之间的 HTTP 交互取决于 referrer 标头)。这意味着使用 localhost:3000 访问 YouTube 频道徽标的每个人都将共享相同的速率限制,因为共享相同的 referrer 标头值以及超出的速率限制。这只是我的理论,因为不可能知道 YouTube 在他们的后端做什么。

【讨论】:

  • 这正是我在访问用户头像图像时遇到的问题!每当从 Google API 服务获取图像时添加 no-referrer 属性似乎是明智之举。
【解决方案2】:

我进行了一些实验以更好地理解问题。

YouTube 图像服务器似乎在 referer(也可能在 IP 上)执行一种匹配,以限制来自外部环境的请求

据我了解,问题出在 HTTP referer。事实上,当您遇到 403 错误时,您可以尝试修改 HTTP 请求,更改 referer,它就像一个魅力。

从技术的角度来看,我认为不可能通过 Javascript 做到这一点,您可以设置一个代理来处理所有 img 请求并根据需要更改 referer。缺点是所有请求都通过您的代理并来自同一个 IP。

从 YouTube 政策的角度来看,我不知道该解决方案是否可行。可能不会(否则为什么会有这种限制?)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 2019-06-23
    • 2013-07-20
    相关资源
    最近更新 更多