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

Ron*_*rby 122 http httpresponse httpwebresponse content-disposition http-headers

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

Response.AppendHeader("content-disposition", "attachment; filename=" + fileName);
Run Code Online (Sandbox Code Playgroud)

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

使用内容处置响应标头还可以做些什么?

And*_*tin 82

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

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

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

15.5内容处理问题

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

  • 如今,权威是RFC 6266. (31认同)
  • 那么,RFC 5678在这里,RFC 9876那里.如果Content-Disposition不受欢迎,我们应该使用什么呢? (5认同)

Mif*_*Fox 25

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

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

Response.AppendHeader("content-disposition", "inline; filename=" + fileName);
Run Code Online (Sandbox Code Playgroud)

保存时,但我不确定.

  • 只有FF呢; 见http://greenbytes.de/tech/tc2231/#inlwithasciifilename (3认同)
  • 我刚尝试使用最新的IE和Chrome,现在可以使用了. (2认同)

小智 6

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


ono*_*nof 5

对于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());
Run Code Online (Sandbox Code Playgroud)