代码之家  ›  专栏  ›  技术社区  ›  Ronnie Overby

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

  •  116
  • Ronnie Overby  · 技术社区  · 15 年前

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

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

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

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

    6 回复  |  直到 6 年前
        1
  •  81
  •   artbristol    6 年前

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

    内容处置标题的权限是 RFC 1806 RFC 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]
    (更新了RFC1806)了解详细信息。

        2
  •  22
  •   Elias Ojala onof    7 年前

    嗯,似乎内容处置头最初是为电子邮件而不是网络创建的。( Link to relevant RFC )

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

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

    存钱的时候,但我不确定。

        3
  •  6
  •   Manish Pai    11 年前

    请参阅RFC 6266(使用超文本传输协议(HTTP)中的Content Disposition Header字段) http://tools.ietf.org/html/rfc6266

        4
  •  4
  •   Elias Ojala onof    7 年前

    对于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());
    
        5
  •  2
  •   NickFitz    15 年前

    此标题在中定义 RFC 2183 所以那是开始阅读的最好地方。

    允许值是指在互联网分配号码管理局(IANA)注册的值; registry of values 应该被视为最终的来源。

        6
  •  0
  •   user824910    7 年前

    我认为这篇关于Microsoft支持部分的知识库文章与这里的讨论有关 How to raise a file download dialog box for a known mime type