我发现以下 asp.net 代码在从数据库提供文件时非常有用:
Response.AppendHeader("content-disposition", "attachment; filename=" + fileName);
这使用户可以将文件保存到他们的计算机上,然后决定如何使用它,而不是浏览器尝试使用该文件。
使用 content-disposition 响应标头可以做哪些其他事情?
我发现以下 asp.net 代码在从数据库提供文件时非常有用:
Response.AppendHeader("content-disposition", "attachment; filename=" + fileName);
这使用户可以将文件保存到他们的计算机上,然后决定如何使用它,而不是浏览器尝试使用该文件。
使用 content-disposition 响应标头可以做哪些其他事情?
请注意,RFC 6266取代了下面引用的 RFC。第 7 节概述了一些相关的安全问题。
content-disposition 标头的权威是RFC 1806和RFC 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)。
好吧,似乎 Content-Disposition 标头最初是为电子邮件而不是 Web 创建的。(链接到相关的 RFC。)
我猜网络浏览器可能会响应
Response.AppendHeader("content-disposition", "inline; filename=" + fileName);
保存时,但我不确定。
请参阅 RFC 6266(超文本传输协议 (HTTP) 中 Content-Disposition 标头字段的使用)https://www.rfc-editor.org/rfc/rfc6266
对于 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());