从其他服务器下载时,HTML5 下载属性不起作用,即使访问控制允许源设置为 all (*)



>我有一个下载链接,如下所示:

<a href="foo.xls" download="bar.xls">Foobar</a>

在同一服务器上下载文件时,这工作正常,但从另一台服务器(在本例中为 Azure Blob 存储)下载时,文件名将保留为"foo.xls",即使 HTTP 响应返回以下标头也是如此:

访问控制允许来源: *

这是设计使然,还是我可以将另一个标头添加到 HTTP 响应中以使其正常工作?

是的

,CORS标头对download属性没有影响。只有两种浏览器支持 download 属性,Firefox 和 Chrome,两种浏览器对跨源文件都有不同的策略。

65之前的Chrome版本实际上确实允许跨源文件使用download属性,没有CORS标头,但Firefox选择不这样做,理由是潜在的社会工程攻击。

MDN 在 a 标签的 download 属性部分记录了 Firefox 20 的这种行为,此后该行为一直没有改变。

在 Firefox 20 中,此属性仅适用于指向具有相同来源的资源的链接。

这份Bugzilla报告讨论了安全问题和使用CORS的可能性。

当用户单击此类链接时,将提示用户是否 想要下载。用户似乎很容易犯错误 认为原始网站上的某些内容正在 下载,而不是来自 bank.com 的东西。

是否有可能使用同源和 CORS 实现它 (访问控制-允许-原产地)如果你质疑跨源 安全?对于 Web 应用程序(创建 Blob 使用JS并让用户使用一些有意义的名称下载它)

谷歌反对为此使用CORS服务。

还有这个Bugzilla报告,它总结了他们从另一个错误报告中做出的决定。

此外,跨源下载在谷歌浏览器中运行良好。

是的,我们认为他们这样做会增加安全漏洞。

Bugzilla 问题似乎并不排除将来使用 CORS 进行跨源download属性支持的可能性,但现在使用 CORS 标头对download属性没有任何作用。如果其他浏览器开始支持该属性,则可能尚未达成共识。

为了完整起见,当然有 Content-Disposition 标头,您可以使用它强制从其他域下载,但这不提供与 download 属性相同的功能。不过,它确实有更好的浏览器支持。

相关内容

  • 没有找到相关文章

最新更新