MIME-Type

Multipurpose Internet Mail Extensions

Wenn ein Programm unterschiedliche Daten-Typen (z.B. Text, Grafik, ...) verarbeiten soll, dann benötigt es Informationen über die Art der Daten. Dieses Problem wurde im Internet erstmals allgemein gelöst und steht nun als Offener Standard (lizenzfrei) MIME-type zur Verfügung.
Standards Standards Chancen ohne Monopole
Geschichte Wer hat wann die MIME-types festgelegt ?
Syntax Einfacher gehts kaum
Anwendung Einige Anwendungs-Beispiele
XHTML Der moderne Nachfolger von HTML
Liste MIME-Type Liste des Apache Webservers
Links Links zu MIME-Type Info Das Internet bietet reichlich Informationen zum Thema MIME-Type

Ursprung und Geschichte der MIME-Types

Allround-Programme wie Browser oder Mail-Programme müssen mit ganz unterschiedlichen Arten von Dokumenten zurechtkommen: Texte, Grafiken, Animationen, Sound, ...
Die Angabe der "mime-type" vor dem "Laden" eines Dokuments soll es solchen Programm ermöglichen, adäquat zu reagieren:
Einige Dokument-Arten kann ein Browser selbst bearbeiten:
  HTML-Webseiten, einfache Texte, einfache Bilder, ...
Für andere Typen wird ein Hilfsprogramm (Plugin) eimngesetzt, z.B.
  SVG-Objektgrafik, Acrobat-(PDF)-Daten, usw.
Dieses Problem musste zuerst bei Mail-Programmen mit Anlage (attachment) gelöst werden (daher der Name ...Mail Extensions), tritt heute jedoch bei fast allen Internet-Programmen und darüber hinaus auf. Der mime-type - Standard ist bei der Internet Engineering Task Force (IETF) mit "Request for Comments" (RFC) festgelegt:
RFC-822 (1982-08) - Vorläufer: ARPAnet - Text
RFC-2045 (1996-11) - Struktur von MIME "Botschaften"
RFC-2046 (1996-11) - Media Typing System
RFC-2047 (1996-11)
RFC-2048 (1996-11) - IANA Registration von MIME-types
RFC-2049 (1996-11) - Ergänzungen, Beispiele
RFC-2077 (1997-01) - Ergänzungen
Viel Papier für eine einfache Sache...

MIME-Type Syntax

Die MIME-type besteht aus zwei Teilen, getrennt durch "/":
mediatype/subtype

Diese Liste der mediatypes ist kurz, wird jedoch im Laufe der Zeit noch wachsen:
mediatypeDaten
textText
imageGrafik, Bilder
videoVideo
audioSound, Audio
applicationan ein Programm gebundene Daten
multipartmehrteilige Daten
messageNachrichten
modelmehrdimensionale Strukturen
Beispiele für Text:
text/plain, text/html, text/javascript, ...

Beispiele für Grafik:
image/gif, image/jpeg, image/png, image/svg+xml, ...

Beispiele für Audio:
audio/midi, audio/mpeg, audio/x-aiff, audio/x-midi, audio/x-mpeg...

Beispiele für Dateien spezieller Programme:
application/pdf, application/msword, application/zip, ...
auch für Audio-PlugIns, z.B.
application/mpeg

Beispiele für ausführbare Programme (Viren-Gefahr !),
z.B. *.exe, *.dll, ...
application/octet-stream

Beispiele für Dateitypen, die am WebServer ausgeführt werden:
(subtype-Namen beginnen meist mit x- ).
application/x-httpd-php, application/x-javascript,

Anwendung von MIME-Types: einige Beispiele

HTML Meta-Elemente:

Im <head> von Webseiten sind meistens mehrere <meta>-Elemente untergebracht.
Das Attribut http-equiv="content-type" bietet die Möglichkeit zur Angabe der MIME-Type (Hier z.B. text/xml ). Leider wird die Type genau dort ignoriert, wo man sie dringend brauchen würde: Vom M$IE Browser.
<meta http-equiv="content-type" content="text/xml; charset=utf-8" />

HTML-Elemente:

In HTML-tags wird optional die MIME-type als Attribut mit dem Namen type angegeben. Die Angabe der MIME-Type in einem <a>-Hyperlink würde es bequem erlauben, einem Browser die Art der Daten anzukündigen, bevor diese eintreffen. Leider wird diese Angabe vom M$IE Browser in den meisten Fällen ignoriert.
<script type="text/javascript"></script>
<link rel=stylesheet type="text/css" href=".." />
<object data=".." type="image/svg+xml"></object>
<a type="text/xml" href="..">Hyperlink</a>

HTTP-Header:

Ein Webserver sendet unterschiedliche Daten-Typen (HTML, Text, Bilder, SVG, PDF, ...) an den Browser.
Zur eindeutigen Kennzeichnung der Daten-Type beginnt jeder Datenstrom mit einem HTTP-Header, in welchem die Type der nachfolgenden Daten definiert wird.
Wenn sie Server-Programme erstellen (z.B. PHP, Perl, ...), dann müssen sie dafür sorgen, dass vor Beginn der erzeugten Daten der richtige HTTP-Header steht.

Ein Browser erhält unterschiedliche Daten vom Webserver. Da jeder Datenstrom mit einem HTTP-Header beginnt, 'weiß' der Browser, wie die nachfolgenden Daten zu interpretieren sind (z.B. als HTML-Quelltext, als JPEG-Bild, usw. )
Manche Daten-Typen werden vom Browser an Hilfsprogramme (Plugins) übergeben, z.B. PDF, SVG,... . Der Browser integriert dann die von den Hilfsprogrammen erzeugten Objekte in die Webseite.
Das funktioniert mit allen modernen Browsern ausgezeichnet - leider nicht in allen Fällen mit M$IE.
Details zum HTTP-Header und seiner Programmierung.

M$-Problem:

Leider neigt M$-Software dazu, die MIME-Type zu ignorieren, auch wenn sie korrekt angegeben wurde. M$ bevorzugt das System der 'Datei-Endungen' (extensions): Die Dateitype wird durch den letzten Teil des Datei-Namens (nach dem Punkt) bestimmt. Ursprünglich waren nur 3 Zeichen zulässig, heute 2..5.
Noch schlimmer: M$-Software schnüffelt teilweise auch im Inhalt von Dateien und behandelt sie dann nach dem Ergebnis dieser Analyse. Diese höchst unerwünschte Bevormundung kann dazu führen, dass sowohl MIME-Type als auch Datei-Endung ignoriert wird. Dagegen hilft nur die Verwendung besserer Software anderer Hersteller . .

Das ist nicht das einzige Problem von M$ mit international anerkannten Standards. Man kann mehr verdienen, wenn man Standards torpediert: Nach einiger Zeit können die KundInnen nur mehr Software dieses Herstellers verwenden - Oder sie haben genug vom Monopol und wechseln Betriebssystem und Software . .
EntwicklerInnen (und nachfolgend auch ihre KundInnen) müssen dafür viel Zeit und Kosten in Kauf nehmen. Bei der aktuellen Marktlage ist man leider oft gezwungen, zwei Varianten von Software herzustellen: Eine einfache (mit allen modernen Standards kompatible) und eine mit mehr oder weniger faulen Tricks (für M$-AnwenderInnen). Das gilt auch für viele Seiten dieses Webs.

XHTML

XHTML ist der moderne Nachfolger des HTML-Standards zur Codierung von Webseiten.
XHTML bietet bedeutend erweiterte Möglichkeiten und ist leicht anzuwenden, da sich der Code nur in wenigen Details von HTML unterscheidet.
Alle modernen Browser 'verstehen' XHTML - Mit Ausnahme von M$IE.
Dieses Problem kann man mit ein paar Tricks zwar umgehen, das hat jedoch dazu geführt, dass die meisten im Internet verfügbaren XHTML-Seiten bei genauer Interpretation fehlerhaft sind.

MIME-Type für XHTML

Die korrekte MIME-Type für XHTML-Dokumente ist
application/xhtml+xml
Je nach Interpretation ist auch diese MIME-Type zulässig:
text/xml
XHTML-Webseiten können Elemente aller anderen XML-Familien direkt im Quelltext enthalten, z.B. SVG-Grafik oder MathML-Formeln. Darüber hinaus ist es möglich, Bilder und andere Objekte in klasssicher HTML-Technik einzubetten.

MIME-Type für HTML

Die MIME-Type klassischer HTML-Webseiten ist
text/html
HTML-Webseiten können Bilder und andere Elemente enthalten, jedoch nicht im Quelltext, sondern in speziellen Einbettungs-Elementen, z.B. <embed> <iframe> <img> <object> usw.

Dateinamen

Der M$IE Browser ignoriert die MIME-Type völlig, wenn die verwendete Datei auf *.htm oder *.html endet. In diesem Fall wird die Datei als HTML-Webseite verarbeitet und alle darin vorkommenden XHTML-Elemente ignoriert.
Übliche Dateinamen für XHTML-Webseiten sind *.xhtml oder *.xml: Diese Dateien werden von M$IE unterschiedlich behandelt, jedenfalls nicht als Webseiten angezeigt, und zwar auch bei korrekter Angabe der MIME-Type.

HTTP-Header

Mit einem Webserver kann man dynamische Webseiten herstellen. Dazu werden z.B. Dateien *.php oder *.pl verwendet. Da solche 'Script-Programme' nicht nur Webseiten herstellen können sondern z.B. auch Bilder, muss im Programm die MIME-Type der erzeugten Daten angegeben werden.
M$IE verwendet jedoch nur die Type text/html korrekt und zeigt den Inhalt als Webseite an. Die Typen application/xhtml+xml und text/xml werden unterschiedlich behandelt, jedenfalls nicht als Webseite angezeigt.

XSL

Die XSL-Technik verwendet eine eigene 'Programmiersprache' zur Herstellung dynamischer Webseiten durch den Browser. XHTML-Elemente könne zwar hergestellt werden, sie werden jedoch von M$IE-Browser ignoriert und das erzeugte Dokument als HTML-Webseite behandelt.
 

MIME-Types Liste

In dieser Liste wird die Text-Datei mime.types angezeigt, die in jeder Version des Apache Webservers enthalten ist. Sie ist nicht verbindlich, aber recht praktisch zum Nachsehen. Die Liste wird ohne Kommentar wiedergegeben, wie sie ist, - ohne Gewähr !

Links zu MIME-Type Info Links zum Thema 'MIME-Type'

Homepages der MIME-types

Internet Engineering Task Force (IETF),
  Request for Comments" (RFC): RFC-822, RFC-2045, RFC-2046, RFC-2047, RFC-2048, RFC-2049, RFC-2077

Information Sciences Institute ISI der USC:
mime-type-Listen mit Beschreibungen der Datentypen (Offizielle IANA Registrierung von MIME-Types)

SelfHTML (de) - Erklärung, Beispiele, Listen
Imperial College London: Chemical mime-types
Hunnysoft: MIME information page
FAQS.org: mime & mail
Asahi: MIME-type Liste
Microsoft: MIME Type Detection in M$IE (Registry), MIME Type Settings for Windows Media Services (M$IIS, Apache...)  

XHTML CSS