HTML5 Rackspace 访问控制允许来源不起作用

Posted

技术标签:

【中文标题】HTML5 Rackspace 访问控制允许来源不起作用【英文标题】:HTML5 Rackspace Access-Control-Allow-Origin Not Working 【发布时间】:2012-04-27 10:03:49 【问题描述】:

所以我在 Rackspace Cloud Files 上有一些视频文件,但由于我使用 html5 函数 (.toDataURL()) “SECURITY_ERR: DOM Exception 18”不断被抛出。当我在服务器上使用视频文件时,我的代码工作正常。

所以我阅读了有关 CORS 的信息并修改了我的 Rackspace Cloud Files 标头,如下所示:

access-control-allow-credentials:   true    
access-control-allow-origin:    [my domain here]    
access-control-allow-headers:   Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control
access-control-allow-methods:   OPTIONS, GET, POST  
access-control-expose-headers:  X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name
Content-Type:   video/webm

但是 DOM Exception 18 错误不断被抛出。我不知道问题是什么。我使用 web-sniffer.net 检查了我在 Rackspace 上的视频文件是否输出了 HTTP 标头,它们是,有什么问题,为什么它不起作用?

我已经在 IE9、Chrome 19、Safari 5.1.2 和 Aurora 12.0a2 上尝试过,它们在这些浏览器中都不起作用,所以我确定这不是浏览器问题。

我只需要摆脱这个 DOM Exception 18 错误。

【问题讨论】:

请编辑您的问题以包含您测试的浏览器的信息以及您使用的“HTML5 功能” - 有很多!我有根据的猜测是 Canvas + toDataURL 但是... 对不起,我刚刚添加了它...我在所有最新的浏览器上测试过,这是同样的错误,所以我认为这不是浏览器问题,是的,它是 toDataURL()抛出异常的函数。 【参考方案1】:

如果您的内容位于 CDN(或当前以外的任何其他主机)上,则 toDataURL() 将不起作用 这是 CANVAS 元素的安全限制。

比较 http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#security-with-canvas-elements 了解禁止内容的详细信息

基本上,每当您想对画布中的图像或视频进行操作并保存结果时,您都必须在同一个域中拥有所有先前的内容。一种解决方法是在用户编辑时获取所需的文件并临时保存它们

【讨论】:

但是根据w3.org/TR/cors/#use-cases,如果您修改访问控制标头,它应该可以工作,它们提供了在您修改标头时使用 toDataURL() 的跨域源示例。它不适用于视频或 CDN,还是我遗漏了一些重要信息? 您所说的 CORS 规则已被画布规范推翻 - 就这么简单。 这是一个 W3C 示例,说明“不污染画布元素”,所以不,画布规范。不会根据该用例否决 CORS。

以上是关于HTML5 Rackspace 访问控制允许来源不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Django CORS 问题:不允许访问控制允许来源

为啥标头访问控制允许来源不起作用?

Django Angular cors错误:不允许访问控制允许来源

访问控制允许来源 htaccess 文件不起作用

Jquery ajax 不工作 - 没有“访问控制允许来源”

访问控制允许带有和不带有 www 的来源