HTTP响应头中内容处置的使用

时间:2009-06-18 12:42:18

标签: http http-headers httpwebresponse httpresponse content-disposition

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

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

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

内容处置响应标题还可以做些什么?

6 个答案:

答案 0 :(得分:82)

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

内容处置标题的权限是RFC 1806RFC 2183.人们也设计了content-disposition hacking.请务必注意,内容处置标头不是HTTP 1.1的一部分标准。

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

  

15.5内容处理问题

     RFC 1806 [35],经常来自   实施内容处理
  (见第19.5.1节)HTTP中的标题是   派生,有很多很多   严重的安全考虑。   内容 - 处置不是
的一部分   HTTP标准,但因为它   广泛实施,我们是   记录其使用和风险   实现者。见RFC 2183 [49]
  (有关详细信息,请更新RFC 1806)。

答案 1 :(得分:23)

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

我猜测网页浏览器可能会响应

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

保存时,但我不确定。

答案 2 :(得分:6)

请参阅RFC 6266(使用超文本传输​​协议(HTTP)中的内容处置标头字段)http://tools.ietf.org/html/rfc6266

答案 3 :(得分: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());

答案 4 :(得分:2)

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

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

答案 5 :(得分:0)

认为此关于Microsoft支持部分的知识库文章与此处How to raise a file download dialog box for a known mime type

的讨论有关