104

ich folgenden asp.net Code gefunden habe, sehr nützlich zu sein, wenn Dateien aus einer Datenbank dienen:Nutzung der Content-Disposition in einem HTTP-Antwort-Header

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

Auf diese Weise können die Benutzer die Datei auf ihren Computer speichern und dann entscheiden, wie man es verwendet, anstatt den Browser zu versuchen, die Datei zu verwenden.

Welche anderen Dinge können mit dem Content-Disposition Response Header getan werden?

+1

Es gibt einige schöne Dokumentation von diesem von Microsoft: http://support.microsoft.com/kb/260519 –

+22

Beachten Sie, dass der Beispielcode beschädigt wird, wenn Dateiname Whitespace oder Nicht-ASCII-Zeichen enthält. Weitere Informationen finden Sie in RFC 6266. –

+0

@JulianReschke, Was ist mit ASCII-Zeichen, die als nicht druckbar gelten? ('0' bis' 0x1F') – Pacerier

Antwort

75

Die Autorität auf dem Content-Disposition-Header ist RFC 1806 und RFC 2183. Menschen auch erdacht haben, ist es wichtig, dass die Content-Disposition-Header Teil des HTTP-1.1-Standard zu beachten ist, nicht.

Der HTTP 1.1 Standard (RFC 2616) erwähnt auch die möglichen Sicherheitsnebenwirkungen von Inhalten Disposition:

15,5 Content-Disposition Probleme

RFC 1806 [35], von denen die oft umgesetzt Inhalt -Disposition
(siehe Abschnitt 19.5.1) Header in HTTP ist abgeleitet, hat eine Reihe von sehr ernsthafte Sicherheitsüberlegungen. Content-Disposition ist nicht Teil der
der HTTP-Standard, aber da es weitgehend umgesetzt ist, sind wir
ihre Nutzung und die Risiken für Implementierer zu dokumentieren. Siehe RFC 2183 [49]
(die RFC 1806 aktualisiert) für Details.

Beachten Sie, dass RFC 6266 die unten aufgeführten RFCs ersetzt. Section 7 beschreibt einige der damit verbundenen Sicherheitsbedenken.

+30

Heutzutage ist die Autorität RFC 6266. –

+17

RFC 6266 kann hier gefunden werden: http://tools.ietf.org/html/rfc6266. – rstackhouse

+0

@JulianReschke, Wie funktionieren "überflüssig" und "Updates"? Wird in neueren Versionen wie RFC 7230 auch RFC 6266 als veraltet angesehen? – Pacerier

21

Nun, es scheint, dass der Header Content-Disposition ursprünglich für E-Mail, nicht das Web erstellt wurde. (Link to relevant RFC.)

Ich vermute, dass Web-Browser

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

reagieren kann beim Speichern, aber ich bin nicht sicher.

+3

Nur FF tut; siehe http://greenbytes.de/tech/tc2231/#inlwithasciifilename –

+2

habe ich gerade mit dem neusten IE und Chrome probiert und es funktioniert jetzt. – Traubenfuchs

2

Dieser Header ist in RFC 2183 definiert, also wäre dies der beste Ort, um mit dem Lesen zu beginnen.

Zulässige Werte sind diejenigen, die bei der Internet Assigned Numbers Authority (IANA) registriert sind; Ihre registry of values sollte als die endgültige Quelle angesehen werden.

4

Für asp.net Benutzer, die.NET Framework stellt eine Klasse einen Content-Disposition-Header zu erstellen: System.Net.Mime.ContentDisposition

Grund Nutzung:

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

Vorsicht, diese Klasse entspricht nicht [RFC 6266] (http://tools.ietf.org/html/rfc6266#section-4.3). Es verwendet UTF-8-base64-Kodierung im 'filename' -Parameter, anstatt' filename * '-Parameter mit [RFC 5987] (http://tools.ietf.org/html/rfc5987) -Codierung zu verwenden. Keine Möglichkeit, fx utils abzuleiten oder zu verwenden, um das zu beheben, fast alles ist nicht übersteuerbar oder intern .... Net fx hat noch einen langen Weg, Offenheit und Erweiterbarkeit zu lernen. In MVC 5.2, 'FileResult' Klasse tut ein wenig besser für' filename', aber nicht behandelt andere Parameter als 'inline' und die meisten seiner Implementierung ist auch intern ... –