130

我发现以下 asp.net 代码在从数据库提供文件时非常有用:

Response.AppendHeader("content-disposition", "attachment; filename=" + fileName);

这使用户可以将文件保存到他们的计算机上,然后决定如何使用它,而不是浏览器尝试使用该文件。

使用 content-disposition 响应标头可以做哪些其他事情?

4

5 回答 5

87

请注意,RFC 6266取代了下面引用的 RFC。第 7 节概述了一些相关的安全问题。

content-disposition 标头的权威是RFC 1806RFC 2183。人们还设计了 content-disposition hacking。重要的是要注意 content-disposition 标头不是 HTTP 1.1 标准的一部分。

HTTP 1.1 标准 ( RFC 2616 ) 还提到了内容处置可能带来的安全副作用:

15.5 内容处置问题

RFC 1806 [35] 是 HTTP 中经常实现的 Content-Disposition
(参见第 19.5.1 节)标头的来源,它有许多非常
严重的安全考虑。Content-Disposition 不是
HTTP 标准的一部分,但由于它被广泛实施,我们正在
为实施者记录它的使用和风险。有关详细信息,请参阅 RFC 2183 [49]
(更新 RFC 1806)。

于 2009-06-18T12:49:15.733 回答
26

好吧,似乎 Content-Disposition 标头最初是为电子邮件而不是 Web 创建的。(链接到相关的 RFC。)

我猜网络浏览器可能会响应

Response.AppendHeader("content-disposition", "inline; filename=" + fileName);

保存时,但我不确定。

于 2009-06-18T12:45:16.397 回答
6

请参阅 RFC 6266(超文本传输​​协议 (HTTP) 中 Content-Disposition 标头字段的使用)https://www.rfc-editor.org/rfc/rfc6266

于 2013-03-01T05:14:07.110 回答
6

对于 asp.net 用户,.NET 框架提供了一个类来创建内容处置标头: System.Net.Mime.ContentDisposition

基本用法:

var cd = new System.Net.Mime.ContentDisposition();
cd.FileName = "myFile.txt";
cd.ModificationDate = DateTime.UtcNow;
cd.Size = 100;
Response.AppendHeader("content-disposition", cd.ToString());
于 2014-03-06T10:10:23.527 回答
2

此标头在RFC 2183中定义,因此这是开始阅读的最佳位置。

允许的值是在互联网号码分配机构 (IANA) 注册的值;他们的价值观登记应被视为最终来源。

于 2009-06-18T12:50:22.050 回答