>我有一个下载链接,如下所示:
<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
属性相同的功能。不过,它确实有更好的浏览器支持。