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

Posted

技术标签:

【中文标题】Firefox 84.0 正在更改下载文件的自定义文件扩展名【英文标题】:Firefox 84.0 is changing custom file extension from downloaded file 【发布时间】:2021-03-31 13:14:37 【问题描述】:

我的 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 更改文件扩展名?

我可以将 Content-Type 更改为“application/octet-stream”,但选中“从现在开始对此类文件自动执行此操作”复选框。不会显示在下载对话框中。

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

【问题讨论】:

【参考方案1】:

我们正在https://bugzilla.mozilla.org/show_bug.cgi?id=1684183 中修复此问题,但可能不会在 Firefox 85 之前发布(即,我们不会发布安全/周期外 dot-release 修复程序来解决此问题)。

如果您不希望 UA 将其视为 zip 文件,则针对您的用例的更简单的解决方法是为这些“任务包”选择/标准化特定的 mimetype,如 application/x-my-fancy-application-task-bundle 行。

Firefox 和其他浏览器都可以决定对 mimetype 进行操作(例如,在 Firefox 的情况下,如果您发送 application/pdf 或 SVG mimetypes,我们会显示“在 Firefox 中打开”选项,即使对于 Content-Disposition: attachment 响应也是如此,以简化打开内容立即)。 Chrome 有特定的checks for application/zip when sniffing。

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

【讨论】:

【参考方案2】:

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

当然,如果这是一个有意的改变,这并不是 Mozilla 第一次忽略网络标准以“按照他们的方式”做事。当标准明确说明其他情况时,我必须使用 5 斜杠 hack 才能正确打开文件协议链接,这仍然让我很恼火(请参阅:https://bugzilla.mozilla.org/show_bug.cgi?id=992123)

【讨论】:

以上是关于Firefox 84.0 正在更改下载文件的自定义文件扩展名的主要内容,如果未能解决你的问题,请参考以下文章

NavigationDrawer 上的自定义字体

在 Python 中使用 Selenium 下载文件:即使设置了 Firefox 配置文件,下载窗口也会打开

更改 uitableviewcell 中的自定义附件视图?

在swift中的自定义标题中获取具有文件大小的下载文件的进度

带有 css 或 jquery 的自定义滚动条 firefox

AppData\Local / Access 的环境变量下载的自定义程序集