133 Stimmen

Verwendung von content-disposition in einer HTTP-Antwortkopfzeile

Ich habe festgestellt, dass der folgende asp.net-Code sehr nützlich ist, wenn Dateien aus einer Datenbank bereitgestellt werden:

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

Dadurch kann der Benutzer die Datei auf seinem Computer speichern und dann entscheiden, wie er sie verwenden möchte, anstatt dass der Browser versucht, die Datei zu verwenden.

Was kann man sonst noch mit dem Antwort-Header content-disposition machen?

24 Stimmen

Beachten Sie, dass Ihr Beispielcode abbricht, wenn filename Leerzeichen oder Nicht-ASCII-Zeichen enthält. Siehe RFC 6266 für weitere Informationen.

0 Stimmen

@JulianReschke, Was ist mit ASCII-Zeichen, die als nicht druckbar gelten? ( 0 a 0x1F )

0 Stimmen

Lesen Sie RFC 6266 (abgesehen von der Tatsache, dass es keine gute Idee wäre, sie in einem Dateinamen zu verwenden; die Empfänger werden sie wahrscheinlich sowieso wegwerfen)

88voto

Andrew Punkte 1823

Beachten Sie, dass RFC 6266 ersetzt die unten genannten RFCs. Abschnitt 7 umreißt einige der damit verbundenen Sicherheitsbedenken.

Die Autorität des content-disposition-Headers ist RFC 1806 y RFC 2183. Die Menschen haben auch erfunden Content-Disposition-Hacking. Es ist wichtig zu beachten, dass der content-disposition header nicht Teil des HTTP 1.1 Standards ist.

Der HTTP 1.1 Standard ( RFC 2616 ) werden auch die möglichen sicherheitsrelevanten Nebeneffekte der Inhaltsdisposition erwähnt:

15.5 Fragen der Inhaltsverfügung

RFC 1806 [35], aus dem die oft implementierte Content-Disposition
(siehe Abschnitt 19.5.1) Header in HTTP ist abgeleitet, hat eine Reihe von sehr
ernsthafte Sicherheitsüberlegungen. Content-Disposition ist nicht Teil von
den HTTP-Standard, aber da es sich weitgehend implementiert ist, sind wir
Dokumentation der Verwendung und der Risiken für Implementierer. Siehe RFC 2183 [49]
(der RFC 1806 aktualisiert) für Details.

31 Stimmen

Heutzutage ist die Autorität RFC 6266.

0 Stimmen

@JulianReschke, Wie funktionieren "supersedes" und "updates"? Machen neuere Versionen wie RFC 7230 auch RFC 6266 obsolet?

0 Stimmen

@Pacerier -- warum sollte RFC 7230 RFC 6266 beeinflussen?

26voto

MiffTheFox Punkte 20793

Es scheint, dass der Content-Disposition-Header ursprünglich für E-Mails und nicht für das Internet entwickelt wurde. ( Link zum entsprechenden RFC .)

Ich gehe davon aus, dass Webbrowser auf

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

beim Speichern, aber ich bin mir nicht sicher.

6voto

Manish Pai Punkte 69

Siehe RFC 6266 (Verwendung des Content-Disposition-Header-Feldes im Hypertext Transfer Protocol (HTTP)) https://www.rfc-editor.org/rfc/rfc6266

6voto

onof Punkte 16911

Für asp.net-Benutzer bietet das .NET-Framework eine Klasse zur Erstellung eines Inhaltsverteilungsheaders: System.Net.Mime.ContentDisposition

Grundlegende Verwendung:

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 Stimmen

Achtung, diese Klasse ist nicht konform mit RFC 6266 . Es macht UTF-8 base64 Kodierung in filename anstelle der Verwendung des Parameters filename* Parameter mit RFC 5987 Kodierung. Keine Möglichkeit, fx utils abzuleiten oder zu verwenden, um das zu beheben, fast alles ist nicht überschreibbar oder intern... .Net fx hat noch einen langen Weg lernen Offenheit und Erweiterbarkeit. In MVC 5.2, FileResult Klasse ist ein wenig besser für filename , behandelt aber keine anderen Parameter wie inline und der größte Teil seiner Umsetzung ist ebenfalls intern...

2voto

NickFitz Punkte 33461

Diese Kopfzeile ist definiert in RFC 2183 Das ist also der beste Ort, um mit der Lektüre zu beginnen.

Zulässige Werte sind die bei der Internet Assigned Numbers Authority (IANA) registrierten Werte; ihre Werteregister sollte als die maßgebliche Quelle betrachtet werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X