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

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

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

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

使用内容处理响应头还可以做哪些事情?

238361 次浏览

好吧,看起来 Content-Disposition 头最初是为电子邮件创建的,而不是为 web 创建的

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

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

但我不确定。

请注意,RFC 6266取代了下面引用的 RFC。

内容处理报头的权威是 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 2183中定义的,因此这将是开始阅读的最佳位置。

允许值是那些在互联网号码分配局(IANA)注册的值,它们的 abc0应被视为确定的来源。

请参阅 RFc6266(使用超文本传输协议中的内容处置标头字段(HTTP)) https://www.rfc-editor.org/rfc/rfc6266

对于 asp.NET 用户,.NET 框架提供了一个类来创建内容处理头: 内容处置

基本用法:

var cd = new System.Net.Mime.ContentDisposition();
cd.FileName = "myFile.txt";
cd.ModificationDate = DateTime.UtcNow;
cd.Size = 100;
Response.AppendHeader("content-disposition", cd.ToString());