Firefox 84.0 正在更改下载文件的自定义文件扩展名
Firefox 84.0 is changing custom file extension from downloaded file
我的网络应用程序创建了一个 zip 文件来下载与“任务”实例相关的文件。此 zip 文件可以包含图像、.pdf 或 .txt 文件,创建的文件名格式为“{taskName}.taskBundle”。
要下载文件,Web 应用程序在响应中使用以下 headers(来自 Firefox 网络监视器):
Content-Disposition: attachment; filename="task1.taskBundle"
Content-Type: application/zip;charset=UTF-8
问题:
使用 Firefox 84.0(Ubuntu 和 Windows 版本),浏览器正在用 '.zip' 替换 '.taskBundle' 扩展名,因此下载的文件名为“task1.zip " 而不是 "task1.taskBundle".
我尝试用 Chrome (87.0) 和另一个 Firefox 版本(83.0、82.0、80.0、74.0)下载相同的文件,文件名是正确的:“task1.taskBundle”。
也许我应该在响应中添加另一个 header 以防止 Firefox 更改文件扩展名?
我可以将 Content-Type 更改为 'application/octet-stream',但要勾选“从现在起自动对此类文件执行此操作”复选框。下载对话框中不显示。
补充说明:
我的应用程序是使用 Grails 3.3.9 编写的,但我认为这不是 Grails 问题,因为响应 header 已按照前面所述发送到客户端。
您可能想在 Firefox 下的 Mozilla 的 Bugzilla 站点 (https://bugzilla.mozilla.org) 上报告此问题,因为我找不到描述此确切行为的报告。看起来他们在最新版本中破坏了某些东西(很难说是错误还是功能),因为我在一个内容类型不匹配的网站上也注意到了这种行为。
当然,如果这是有意的改变,那将不是 Mozilla 第一次无视 Web 标准以“按照他们的方式”做事。当标准明确另有规定时,我必须使用 5 斜线 hack 来使文件协议链接正确打开,这仍然让我很恼火(参见:https://bugzilla.mozilla.org/show_bug.cgi?id=992123)
我们正在 https://bugzilla.mozilla.org/show_bug.cgi?id=1684183 修复此问题,但它可能不会在 Firefox 85 之前(即我们不会发布安全/周期外点发布修复只是为了解决这个问题)。
如果您不希望 UA 将其视为压缩文件。
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
文件实际上不是, 图片。所以我们为许多不同的 mime 类型添加了扩展规范化。我错误地认为 application/zip
文件是 zip 文件,并且可以这样处理。
我的网络应用程序创建了一个 zip 文件来下载与“任务”实例相关的文件。此 zip 文件可以包含图像、.pdf 或 .txt 文件,创建的文件名格式为“{taskName}.taskBundle”。
要下载文件,Web 应用程序在响应中使用以下 headers(来自 Firefox 网络监视器):
Content-Disposition: attachment; filename="task1.taskBundle"
Content-Type: application/zip;charset=UTF-8
问题:
使用 Firefox 84.0(Ubuntu 和 Windows 版本),浏览器正在用 '.zip' 替换 '.taskBundle' 扩展名,因此下载的文件名为“task1.zip " 而不是 "task1.taskBundle".
我尝试用 Chrome (87.0) 和另一个 Firefox 版本(83.0、82.0、80.0、74.0)下载相同的文件,文件名是正确的:“task1.taskBundle”。
也许我应该在响应中添加另一个 header 以防止 Firefox 更改文件扩展名?
我可以将 Content-Type 更改为 'application/octet-stream',但要勾选“从现在起自动对此类文件执行此操作”复选框。下载对话框中不显示。
补充说明: 我的应用程序是使用 Grails 3.3.9 编写的,但我认为这不是 Grails 问题,因为响应 header 已按照前面所述发送到客户端。
您可能想在 Firefox 下的 Mozilla 的 Bugzilla 站点 (https://bugzilla.mozilla.org) 上报告此问题,因为我找不到描述此确切行为的报告。看起来他们在最新版本中破坏了某些东西(很难说是错误还是功能),因为我在一个内容类型不匹配的网站上也注意到了这种行为。
当然,如果这是有意的改变,那将不是 Mozilla 第一次无视 Web 标准以“按照他们的方式”做事。当标准明确另有规定时,我必须使用 5 斜线 hack 来使文件协议链接正确打开,这仍然让我很恼火(参见:https://bugzilla.mozilla.org/show_bug.cgi?id=992123)
我们正在 https://bugzilla.mozilla.org/show_bug.cgi?id=1684183 修复此问题,但它可能不会在 Firefox 85 之前(即我们不会发布安全/周期外点发布修复只是为了解决这个问题)。
如果您不希望 UA 将其视为压缩文件。
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
文件实际上不是, 图片。所以我们为许多不同的 mime 类型添加了扩展规范化。我错误地认为 application/zip
文件是 zip 文件,并且可以这样处理。