104

我发现下面的asp.net代码从数据库服务文件时是非常有用的然后决定如何使用它,而不是浏览器试图使用该文件。使用内容,处置

使用content-disposition响应头可以做些什么其他的事情?

+1

的讨论有一些不错的文档来自Microsoft的此:http://support.microsoft.com/kb/260519 – 2010-03-31 15:52:14

+22

请注意,如果文件名包含空格或非ASCII字符,您的示例代码将中断。有关更多信息,请参阅RFC 6266。 – 2011-09-02 14:58:14

+0

@JulianReschke,被认为是不可打印的ASCII字符呢? (`0`到`0x1F`) – Pacerier 2015-02-05 09:39:20

回答

75

内容 - disposition头的权威RFC 1806RFC 2183.人们还设计需要注意的是内容处理标头是不是HTTP 1.1标准的一部分,这是非常重要的。

HTTP 1.1标准(RFC 2616)也提到内容部署的可能的安全的副作用:

15.5内容处置问题

RFC 1806 [35],从该常 实现内容 - 配置
(请参阅第19.5.1节)HTTP中的头部是 导出的,具有很多非常严重的
安全性考虑因素。 内容处置不是
的HTTP标准的一部分,但由于它是 广泛实现,我们
记录其使用和风险 实现者。有关详细信息,请参阅RFC 2183 [49]
(它更新RFC 1806)。

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

21

好吧,似乎Content-Disposition标题最初是为电子邮件而不是网络创建的。 (Link to relevant RFC

我猜,Web浏览器可以向

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

保存时作出回应,但我不知道。

2

该标题在RFC 2183中定义,所以这将是最好的开始阅读的地方。

允许的值是在互联网号码分配机构(IANA)注册的值;他们的registry of values应该被视为权威来源。

4

对于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());