Youtube API(v3)和CORS预检

时间:2013-05-24 22:36:00

标签: angularjs youtube-api cors


编辑:由于OPTIONS预检是在去年秋天推出的,因此这篇文章看起来很无聊。我的问题比任何事情都更多的用户错误。请参阅注释以获取更多详细信息(为了文档起见,我会将其全部留在此处)。 --jlm


Youtube API不支持OPTIONS请求方法是一个已知问题,因此任何尝试进行跨源预检的Web应用都会失败,即使(如Youtube API的情况)实际的CORS也是如此请求会成功。由于本周我们再次面对这个问题,我们提出了三个解决方法;但是,每个人都有自己的优点和缺点。

可能的解决方法#1:忘记预检,只做简单的跨源请求。

好处 - A)它有效。 B)这是执行大多数GET或POST请求时所需的所有规范。

缺点 - A)规范声明任何PATCH,PUT或DELETE请求,以及使用除表单数据,url编码或文本之外的内容类型的POST请求/ plain,需要预检。因此,虽然它会起作用,但它会破坏规范(如果可能的话,我们希望避免这种规范)。 B)设置自定义标题时也需要预检;因此,例如,当我在1.0分支中使用AngularJS的$ http方法时,它会设置自定义标头,从而触发甚至GET请求的预检。在这种情况下,当然,我可以编写自己的$ http服务或移动到1.1分支(因为问题实际上是在Angluar的结尾)。

可能的解决方法#2:使用JSON-P

好处 - A)它也有效(在某些情况下,无论如何)。 B)设置起来相当简单。

缺点 - A)较旧的技术,目前尚不清楚Youtube API是否会继续支持JSONP。 B)需要回调。 C)仅限于GET请求。

可能的解决方法#3:在同一个域上设置服务器端代理,使用它与Youtube API进行通信。

好处 - A)完全不需要执行CORS请求,因为客户端在同一个源上工作,而服务器端代理不需要预检任何内容。

缺点 - A)设置变得复杂,特别是如果尝试使用凭证(oAuth2通过代理可能是非常野兽)。

这篇文章有一个实际的问题(或几个,实际上)

  1. 您对上述任何或所有变通方法有什么看法(更好)?
  2. 有没有人实施其他解决方案?
  3. 是否有关于Youtube服务器是否/何时支持OPTIONS方法的信息?
  4. 欢迎任何和所有评论 - 如果这不是这个问题的最佳论坛,我会提前道歉(虽然我希望通过将它放在Stack Overflow上,它会对其他人有用面对同样的问题)

1 个答案:

答案 0 :(得分:0)

Youtube上传API(uploads.gdata.youtube.com)不支持CORS。

您可以对问题herehere进行投票。关于它的论坛帖子也有几篇。 CORS is not working !

谷歌似乎仍在努力解决这个问题,虽然大约一年前开始研究它,所以很可能在修复问题之前不推荐使用API​​(因为我们已经有了V3)。

唯一的解决方法是使用代理(这不是很酷)。基本上将视频上传到您的服务器上,然后将其发送到youtube。