dciwam.de / faq / html / link-auf-datei

Link auf eine Datei

Wie kann ich es realisieren, das, wenn ich auf einen Link klicke, der auf eine Datei zum Download verweist, diese Datei nicht öffnet, sondern das "Download-Fenster" erscheint? Ich habe auf meiner Seite Links auf MP3-Files, Word-Doc's usw.. Wenn ich auf diese Klicke, werden die Dateien geöffnet. Es geht nur mit der rechten Maustaste -> Ziel speichern unter.. - Das ist doch schäbig!! Was muß ich beachten?

Was passiert im Hintergrund, wenn jemand in seinem Browser einem Link folgt? Der Browser schickt eine HTTP-Request-Nachricht an den Server und erhält, so kein Fehler auftritt, von diesem eine HTTP-Response-Nachricht mit dem gewünschten Inhalt.

Diese Nachrichten ähneln im Aufbau E-Mail-Nachrichten. Sie bestehen aus einem Header und einem Body. Im Body stehen die zu übertragenden Daten, also bei einer Server-Antwort zum Beispiel ein HTML- oder WordDokument oder eine MP3-Datei; bei Requests ist der Body häufig leer, wenn nicht beispielsweise Eingaben des Benutzers in ein Formular übertragen werden müssen. Der Header enthält Metainformationen (das sind Informationen über Informationen) über den Request bzw. die Antwort sowie gegebenenfalls über die Daten im Body.

Wenn Du das ganz genau wissen möchtest, kannst Du Dir die Spezifikation von HTTP [1] durchlesen.

Eine dieser Metainformationen ist der MIME-Typ des Bodys. MIME steht für "Multipurpose Internet Mail Extensions". Die MIME-Spezifikationen legen fest, wie Daten der verschiedensten Arten - Text, Bilder und so weiter - zur Übertragung kodiert und gekennzeichnet werden. Auch diese Spezifikationen kannst Du Dir an einem langen Winterabend durchlesen [2].

Häufig gestellte Fragen zu MIME beantwortet die MIME FAQ [3].

Uns sollen hier nur Typangaben interessieren. Ein MIME-Typ besteht aus zwei Teilen, dem abstrakten Typ, z.B. text, audio oder image, und einem spezifischen Subtyp, der ein konkretes Datenformat bezeichnet, für Text zum Beispiel plain, html oder richtext. Typ und Subtyp bilden, durch Schrägstrich getrennt, zusammen die MIME-Typangabe. Ein Bild im PNG-Format hat beispielsweise den MIME-Typ image/png und ein HTML-Dokument text/html.

Was nun passiert, nachdem der Benutzer im Browser einem Links gefolgt ist, hängt von zwei Dingen ab, dem vom Server in seiner Antwort angegebenen MIME-Typ und von der diesem Typ im Browser zugeordneten Aktion.

Was der Server in seiner Antwort angibt, hängt von seiner Konfiguration ab. Typischerweise sind MIME-Typen serverseitig an Dateiendungen geknüpft, so daß zum Beispiel alle Dateien namens *.html mit dem Typ text/html ausgeliefert werden. Bei CGI-Programmen hingegen ist der Programmierer dafür zuständig, vor dem eigentlichen Inhalt eine korrekte Typangabe zu liefern. Wie sich die Zuordnung zwischen Endungen und MIME-Typen ändern oder erweitern läßt, erfährst Du aus dem Manual Deines Web-Servers.

Browserseitig kann eingestellt werden, was bei Empfang einer HTTP-Antwort mit einem bestimmten MIME-Typ passieren soll. Möglich sind zum Beispiel die interne Verarbeitung (HTML, gängige Grafiktypen), die übergabe an ein Plugin oder der Aufruf eines externen Programms. Ist einem Typ keine Aktion zugeordnet, bietet der Browser in der Regel das Speichern in eine Datei an.

Als Betreiber einer Website sollte man dafür sorgen, daß alle Daten mit korrekter Typangabe ausgeliefert werden, und sich nicht darum kümmern, was die Browser dann damit anstellen. Der Benutzer konfiguriert seine Software so, wie er es gerne haben möchte, und er erwartet, daß sie dann auch so funktioniert. Man sollte ihm diese Freiheit tunlichst lassen und ihm nichts aufzwingen. Wenn jemand gewohnt ist, Word-Dokuemnte direkt im Browser angezeigt zu bekommen, wird er sich über jede ungewollte Abweichung davon erst wundern und dann ärgern.

Für Fälle, in denen es dennoch angebracht scheint, Daten ausdrücklich zum Abspeichern als Datei anzubieten, hält MIME einen besonderen Typ bereit, application/octet-stream. Der Typ application ist für Daten vorgesehen, denen keiner der anderen Typen zugeordnet werden kann. Der Subtyp octet-stream dient zur Kennzeichnung nicht zu interpretierender binärer Daten; Speichern als Datei ist in diesem Fall die einzige sinnvolle Aktion. Wenn man zu dieser Lösung greift, sollte man dem Benutzer zwei Links anbieten, einen, bei dem der korrekte MIME-Typ mitgeliefert wird, und einen für application/octet-stream. Ob und wie sich das im Detail relisieren läßt, hängt von der verwendeten Serversoftware ab und kann gegebenenfalls in news:de.comm.software.webserver erfragt werden.

Relevante Links

Sven Türpe • http://gaos.org/~sven/

Zum Seitenanfang

URL: http://dciwam.de | Letzte Änderung: 20.05.2009 | G. Schneider | Kontakt