Firefox 忽略内容处置

Firefox Ignores Content-Disposition

我正在尝试编写 MVC 端点,它可以选择将内容处置设置为内联或附件,以便在新的浏览器选项卡中显示文件(pdf)或下载它。 UI 允许用户 select 他们想要如何打开文件(不是我的设计 - 无法改变它的那个方面)。

请注意,这在 Chrome/Edge 中如预期的那样有效。

在 Firefox 中,PDF 的应用程序设置似乎胜过内容配置。有没有可靠的方法让 Firefox 尊重内容处置?最好是一种可以使用普通安装的浏览器的方法,这样最终用户不需要在他们的终端上进行任何修改就可以工作。

这是我用来设置响应的代码(class 派生自 ApiController):

var response = Request.CreateResponse(System.Net.HttpStatusCode.OK);
response.Content = new PushStreamContent((stream, content, context) =>
{
    dispatcher.Dispatch(request, stream);
}, new MediaTypeHeaderValue(MediaTypeNames.Application.Pdf));


response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(contentDisposition)
{
    FileName = $"{auto_generated_fileName}.pdf",
};

response.Headers.CacheControl = new CacheControlHeaderValue()
{
    NoCache = true,
    NoStore = true
};

return response;

我们在我们的网络应用程序中也注意到了这个问题。 Web 应用程序有一个下载按钮,允许用户下载 PDF 文件。 Firefox 在当前选项卡中显示 PDF 文件,这有效地杀死了 webapp。

经过一些研究,这似乎是一个有意设计的功能,请参阅 release notes for Firefox 98:

When you set an application to open files of a specific type in your Firefox preference settings, those files will open automatically, even files served by the website with "content-disposition: attachment". The same applies to PDF files that are set to open in Firefox by default. This is a fix to bug 453455.

就我个人而言,虽然我可以理解某些用户可能希望将其用于性能不佳的网页,但这是 well-behaved 网络应用程序的问题。

设置 download attribute on the anchor 似乎也不起作用,Firefox 仍显示内联文件(已使用 Firefox 99.0 测试)

据我所知,如果浏览器不允许,您不能强制浏览器下载文件。 OwnCloud 或 Google Drive 等其他网络应用程序也有同样的问题——如果您右键单击 Google Drive 中的 PDF 文件,然后单击 Dowload,Firefox 仍会打开 PDF内联文件,而 Chrome 下载它。

目前,您最好的办法似乎是在新选项卡中打开文件,以防止 web 应用程序或网页被下载的文件替换(这也是 Google Drive 似乎要做)。您可以在新标签页或 window 中打开下载,例如通过 <button> 元素上的 target attribute on an <a> links or via the formtarget atttribute

在尝试找到与 OP 相同问题的解决方案后,我找到了@blutorange 的答案。然而,就在我来到这里之前,我在 2013 年偶然发现了这个答案 - https://whosebug.com/a/16515146 建议将 Content-Type header 设置为 application/octet-stream,而不是 [=12] =].

我试过那个解决方案,你知道吗 - 它有效! PDF 会自动在 Firefox 的新选项卡中打开,但至少它不会替换我的应用程序的选项卡,所以耶! Chrome 似乎也不介意,我计算机上的 PDF 查看器也将文件识别为 PDF。

现在,这可能不是解决我们面临的问题的最“正确”的方法,但它是强制打开新选项卡的替代方法。