Firefox 84.0正在更改下载文件的自定义文件扩展名



我的web应用程序创建一个zip文件来下载与";任务";例子该zip文件可以包含图像、.pdf或.txt文件,创建的文件名的形式为";{taskName}.taskBundle";。

要下载文件,web应用程序在响应中使用以下标题(来自Firefox网络监视器(:

Content-Disposition: attachment; filename="task1.taskBundle"
Content-Type: application/zip;charset=UTF-8

问题:

使用Firefox 84.0(Ubuntu和Windows版本(,浏览器将".taskBundle"扩展名替换为".zip",因此下载的文件名为";task1.zip";而不是";task1.taskBundle";。

我尝试用Chrome(87.0(和另一个Firefox版本(83.0、82.0、80.0、74.0(下载相同的文件,文件名是正确的:;task1.taskBundle";。

也许我应该在响应中添加另一个标头,以防止Firefox更改文件扩展名?

我可以将内容类型更改为"应用程序/八位位组流";从现在起,对这样的文件自动执行此操作;不会显示在下载对话框中。

附加说明:我的应用程序是使用Grails 3.3.9编写的,但我认为这不是Grails的问题,因为响应头是如上所述发送到客户端的。

我们正在修复https://bugzilla.mozilla.org/show_bug.cgi?id=1684183,但它可能不会出现在Firefox 85之前(即我们不会仅仅为了解决这个问题而发布安全/周期外的点发布修复程序(。

对于您的用例,一个更简单的解决方法是选择/标准化这些";任务束";,按照application/x-my-fancy-application-task-bundle的行,如果您不希望UA将其视为zip文件。

Firefox和其他浏览器都可以决定对mimetype执行操作(例如,在Firefox的情况下,如果您发送application/pdf或SVG mimetype,即使是Content-Disposition: attachment响应,我们也会显示"在Firefox中打开"选项,以简化立即打开内容(。Chrome在嗅探时会对application/zip进行特定检查。

这里的回归变化是对处理使用Content-Type: image/webp发送foo.jpg文件的web服务器的修复的一部分,用户抱怨生成的.jpg文件实际上不是jpegs。因此,我们为许多不同的mimetype添加了扩展规范化。我错误地认为application/zip文件是zip文件,并且可以这样处理。

您可能想在Mozilla的Bugzilla网站上报告这一情况(https://bugzilla.mozilla.org)在Firefox下,因为我找不到描述这种确切行为的报告。看起来他们在最新版本中破坏了一些东西(很难说是bug还是功能(,因为我在一个内容类型不匹配的网站上也注意到了这种行为。

当然,如果这是一个有意的改变,这将不是Mozilla第一次无视网络标准来做事;他们的方式";。当标准明确规定不正确时,我不得不使用5闪破解来正确打开文件协议链接,这仍然让我非常恼火(请参阅:https://bugzilla.mozilla.org/show_bug.cgi?id=992123)

最新更新