从其他服务器下载时,HTML5 下载属性不起作用,即使 Access-Control-Allow-Origin 设置为全部 (*)

问题描述 投票:0回答:1

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

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

在同一服务器上下载文件时效果很好,但从另一台服务器(本例中为 Azure blob 存储)下载时,文件名仍为“foo.xls”,即使 HTTP 响应返回以下标头:

访问控制允许来源:*

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

html http download attributes cross-domain
1个回答
45
投票

是的,根据设计,CORS 标头对

download
属性没有影响。只有两种浏览器支持
download
属性,Firefox 和 Chrome,并且这两种浏览器对跨源文件有不同的政策。

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

MDN 在 

download 标签

a
属性部分记录了 Firefox 20 的此行为,此后该行为一直没有改变。

在 Firefox 20 中,仅当指向具有相同来源的资源的链接时才会使用此属性。


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

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

>> 是否可以用同源和CORS来实现 >> 如果您质疑跨源,请记住(访问-控制-允许-起源) >>安全?这对于 Web 应用程序来说是非常有用的功能(创建 Blob >> 使用JS并让用户下载一些有意义的名称)
Google 反对为此使用 CORS。


还有

这个 Bugzilla 报告,总结了他们从其他错误报告中做出的决定。

此外,跨源下载在 Google Chrome 中运行良好。

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

关于 Firefox 的 Bugzilla 讨论似乎并不排除将来使用 CORS 来支持跨源

download

 属性的可能性,但现在使用 CORS 标头并不能启用 
download
 属性。如果其他浏览器开始支持该属性,则可能尚未达成共识。

为了完整起见,当然可以使用

Content-Disposition

 标头强制从其他域下载,但这并不提供与 
download
 属性相同的功能。不过它确实有更好的浏览器支持。

© www.soinside.com 2019 - 2024. All rights reserved.