Nr.
Der Inhaltstyp sollte sein, was er zu sein bekannt ist, wenn Sie es wissen. application/octet-stream
ist in RFC 2046 als "beliebige binäre Daten" definiert, und es gibt definitiv eine Überschneidung hier, dass es für Entitäten geeignet ist, deren alleiniger Zweck es ist, auf die Festplatte gespeichert zu werden und von diesem Zeitpunkt an außerhalb von allem "Webby" zu sein. Oder aus einer anderen Perspektive betrachtet; Das einzige, was man sicher mit application/octet-stream tun kann, ist es auf die Festplatte zu speichern und zu hoffen, dass jemand anderes weiß, wofür es ist.
Sie können die Verwendung von Content-Disposition
mit anderen Inhaltstypen kombinieren, wie image/png
oder sogar text/html
, um anzuzeigen, dass Sie speichern möchten anstatt anzuzeigen. Früher war es so, dass einige Browser es bei text/html
ignorieren würden, aber ich denke, das war vor langer Zeit (und ich gehe bald ins Bett, also werde ich jetzt nicht damit anfangen, eine ganze Reihe von Browsern zu testen; vielleicht später).
RFC 2616 erwähnt auch die Möglichkeit von Erweiterungstoken, und heutzutage erkennen die meisten Browser inline
als Zeichen dafür, dass Sie möchten, dass die Entität wenn möglich angezeigt wird (das heißt, wenn es sich um einen Typ handelt, den der Browser weiß, wie man ihn anzeigt, sonst hat er keine Wahl in der Sache). Dies ist natürlich ohnehin das Standardverhalten, aber es bedeutet, dass Sie den Dateinamen
-Teil des Headers einschließen können, den Browser verwenden wird (vielleicht mit einigen Anpassungen, damit Dateierweiterungen den lokalen Systemnormen für den betreffenden Inhaltstyp entsprechen, vielleicht auch nicht) als Vorschlag, wenn der Benutzer versucht, zu speichern.
Daher:
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="bild.png"
Bedeutet "Ich weiß nicht, was zum Teufel das ist. Bitte speichere es als Datei, idealerweise mit dem Namen bild.png".
Content-Type: image/png
Content-Disposition: attachment; filename="bild.png"
Bedeutet "Dies ist ein PNG-Bild. Bitte speichern Sie es als Datei, idealerweise mit dem Namen bild.png".
Content-Type: image/png
Content-Disposition: inline; filename="bild.png"
Bedeutet "Dies ist ein PNG-Bild. Bitte zeigen Sie es an, es sei denn, Sie wissen nicht, wie man PNG-Bilder anzeigt. Andernfalls, oder wenn der Benutzer es speichern möchte, empfehlen wir den Namen bild.png für die Datei, in der Sie es speichern".
Von den Browsern, die inline
erkennen, würden einige es immer verwenden, während andere es verwenden würden, wenn der Benutzer "Verknüpfung speichern unter" ausgewählt hat, aber nicht, wenn sie "Speichern" beim Anzeigen ausgewählt haben (oder zumindest war das bei IE früher so, es könnte vor einigen Jahren geändert haben).