104

我發現下面的asp.net代碼從數據庫服務文件時是非常有用的然後決定如何使用它,而不是瀏覽器試圖使用該文件。使用內容,處置

使用content-disposition響應頭可以做些什麼其他的事情?

+1

的討論有一些不錯的文檔來自Microsoft的此:http://support.microsoft.com/kb/260519 – 2010-03-31 15:52:14

+22

請注意,如果文件名包含空格或非ASCII字符,您的示例代碼將中斷。有關更多信息,請參閱RFC 6266。 – 2011-09-02 14:58:14

+0

@JulianReschke,被認爲是不可打印的ASCII字符呢? (`0`到`0x1F`) – Pacerier 2015-02-05 09:39:20

回答

75

內容 - disposition頭的權威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 6266取代下面引用的RFC。 Section 7概述了一些相關的安全問題。

21

好吧,似乎Content-Disposition標題最初是爲電子郵件而不是網絡創建的。 (Link to relevant RFC

我猜,Web瀏覽器可以向

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

保存時作出迴應,但我不知道。

2

該標題在RFC 2183中定義,所以這將是最好的開始閱讀的地方。

允許的值是在互聯網號碼分配機構(IANA)註冊的值;他們的registry of values應該被視爲權威來源。

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());