W3docs

MIME-Typen

Ein MIME-Typ gibt das Format einer Datei an. Lerne die Typ/Subtyp-Syntax, den charset-Parameter und wo MIME-Typen in HTML vorkommen.

Die Multipurpose Internet Mail Extensions, bekannt als MIME-Typ (auch Medientyp oder Content-Type genannt), sind ein standardisierter String, den Browser und Server verwenden, um den Typ des übertragenen Inhalts zu identifizieren. Die Spezifikation ist in IETF RFC 6838 definiert.

Ein MIME-Typ ist ein Bezeichner-String, kein Dateiformat. Browser verlassen sich in der Regel auf den MIME-Typ — der vom Server im Content-Type-Antwort-Header gesendet wird — und nicht auf die Dateiendung, um zu entscheiden, wie ein Dokument verarbeitet wird. Deshalb müssen Server so konfiguriert werden, dass sie jeder Antwort den richtigen MIME-Typ hinzufügen. Wenn der Typ falsch ist, können Browser den Inhalt einer Datei falsch interpretieren: Ein Stylesheet könnte ignoriert, ein Skript blockiert oder eine JSON-Antwort als Klartext angezeigt werden.

Wo MIME-Typen in HTML vorkommen

Obwohl MIME-Typen aus der Welt der E-Mail und HTTP-Header stammen, schreibt man sie in HTML öfter direkt, als man vielleicht erwartet. Die häufigsten Stellen sind:

  • type bei <link> und <script> — deklariert den Medientyp einer verlinkten Ressource, z. B. <link rel="stylesheet" type="text/css"> oder <script type="module">. Siehe den <link>-Tag und den <script>-Tag.
  • type bei <source> — teilt <audio>/<video>/<picture> mit, welches Format jede Quelle hat, damit der Browser Formate überspringen kann, die er nicht abspielen kann. Siehe den <source>-Tag.
  • accept bei <input type="file"> — filtert, welche Dateitypen der Dateiauswahldialog anbietet, mithilfe von MIME-Typen oder Dateiendungen. Siehe das accept-Attribut und den <input>-Tag.
  • enctype bei <form> — legt fest, wie Formulardaten beim Absenden kodiert werden; der Wert ist ein MIME-Typ wie multipart/form-data. Siehe den <form>-Tag.
  • <meta http-equiv="Content-Type"> — deklarierte historisch den Typ und die Zeichenkodierung des Dokuments. In HTML5 wird dies durch das kürzere <meta charset="UTF-8"> ersetzt. Siehe den <meta>-Tag.
<!-- type on <link> and <script> -->
<link rel="stylesheet" type="text/css" href="styles.css" />
<script type="module" src="app.js"></script>

<!-- type on <source> -->
<video controls>
  <source src="movie.webm" type="video/webm" />
  <source src="movie.mp4" type="video/mp4" />
</video>

<!-- accept on a file input, and enctype on the form -->
<form action="/upload" method="post" enctype="multipart/form-data">
  <input type="file" name="picture" accept="image/png, image/jpeg" />
  <button type="submit">Upload</button>
</form>

Syntax: Typ, Subtyp und Parameter

Jeder MIME-Typ hat dieselbe Struktur — einen Typ und einen Subtyp, getrennt durch einen Schrägstrich (/), ohne Leerzeichen:

type/subtype

Ein MIME-Typ muss immer beide Teile enthalten; jeder Typ hat seinen eigenen Satz von Subtypen:

text/html
image/png
application/json
video/mp4

Der Typ ist die übergeordnete Kategorie (text, image, audio, video, application, …) und der Subtyp benennt das genaue Format innerhalb dieser Kategorie. MIME-Typen sind nicht case-sensitiv, werden aber üblicherweise in Kleinbuchstaben geschrieben.

Man kann einen optionalen Parameter nach einem Semikolon (;) anhängen, um weitere Details hinzuzufügen:

type/subtype;parameter=value

Der charset-Parameter

Der häufigste Parameter ist charset, der dem Browser mitteilt, welche Zeichenkodierung eine Textressource verwendet. Für HTML-Seiten sollte dies fast immer UTF-8 sein:

text/html; charset=UTF-8

Dieser genaue String ist normalerweise im HTTP-Content-Type-Header zu sehen. In HTML setzt man dieselbe Information mit einem einzigen Tag im <head> des Dokuments:

<meta charset="UTF-8" />

Wenn die Kodierung fehlt oder falsch ist, können Buchstaben mit Akzenten und nicht-lateinische Zeichen als unleserliche Symbole dargestellt werden (zum Beispiel é statt é).

MIME-Typen werden in zwei Kategorien unterteilt: diskrete und Multipart-Typen. Jede hat spezifische Subtypen.

Diskrete Typen

MIME-Typen

text/plain
text/html
image/jpeg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream

Diskrete Typen geben die Kategorie eines einzelnen, in sich geschlossenen Dokuments an. Sie können einer der folgenden sein:

TypBeschreibungBeispiele typischer Subtypen
applicationEnthält Binärdatenapplication/javascript, application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf
audioAudiodateiaudio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
fontSchriftart-/Typeface-Datenfont/woff, font/ttf, font/otf
imageBilddateiimage/png, image/jpeg, image/gif, image/webp, image/svg+xml
messageNachricht, die eine andere Nachricht umschließtmessage/rfc822, message/partial
modelModelldaten für 3D-Objektemodel/3mf, model/vrml
textTextdokumenttext/plain, text/html, text/css, text/javascript
videoVideodateivideo/webm, video/ogg, video/mp4

Zur Beschreibung eines Textdokuments, das zu keinem bestimmten Subtyp gehört, wird text/plain verwendet. Dokumente mit Binärdaten ohne spezifischen Subtyp werden mit application/octet-stream beschrieben.

Multipart-Typen

MIME-Typen

multipart/form-data
multipart/byteranges

Multipart-Typen beschreiben Dokumente, die aus mehreren Teilen bestehen, wobei jeder Teil seinen eigenen MIME-Typ haben kann. Der in HTML am häufigsten anzutreffende Typ ist multipart/form-data, der als Wert für das enctype-Attribut eines Formulars verwendet wird, wenn Dateien hochgeladen werden.

TypBeschreibungBeispiele typischer Subtypen
multipartDaten aus mehreren Komponentenmultipart/form-data, multipart/byteranges

Häufige MIME-Typen

Die folgende Tabelle listet weit verbreitete, moderne MIME-Typen auf. Viele veraltete Typen mit dem Präfix x- (z. B. image/x-icon) sind veraltet und sollten in neuen Projekten vermieden werden. Eine vollständige, verbindliche Liste findet sich im IANA Media Types-Register.

DateiendungMedientyp
.html, .htmtext/html
.csstext/css
.jsapplication/javascript
.jsonapplication/json
.pngimage/png
.jpg, .jpegimage/jpeg
.gifimage/gif
.svgimage/svg+xml
.mp3audio/mpeg
.mp4video/mp4
.pdfapplication/pdf
.zipapplication/zip

Den richtigen MIME-Typ in HTML wählen

Einige praktische Regeln decken den größten Teil des alltäglichen HTML ab:

  • Für CSS verwendet man text/css. In modernem HTML kann man es sogar weglassen: <link rel="stylesheet" href="..."> impliziert bereits CSS, daher ist ein type-Attribut optional.
  • Für JavaScript verwendet man text/javascript (den standardmäßig registrierten Typ). Ein klassisches <script> benötigt überhaupt kein type; type="module" wird nur hinzugefügt, um ES-Module zu aktivieren.
  • Für <source>-Elemente bei Medien sollte immer ein type wie video/mp4 oder audio/ogg angegeben werden. So kann der Browser Formate, die er nicht dekodieren kann, überspringen, ohne sie zuerst herunterzuladen.
  • Für Datei-Inputs akzeptiert das accept-Attribut eine kommagetrennte Liste von MIME-Typen (image/png), Wildcard-Typen (image/*) oder Dateiendungen (.pdf).

Der eigentliche Content-Type-Header wird vom Webserver (Nginx, Apache, Express usw.) gesetzt, nicht durch HTML — konsultiere die Dokumentation deines Servers oder das IANA Media Types-Register, um Dateiendungen korrekt Typen zuzuordnen.

Übung

Übung
Ein MIME-Typ wird als Typ/Subtyp geschrieben. Welche Aussagen über MIME-Typen sind korrekt?
Ein MIME-Typ wird als Typ/Subtyp geschrieben. Welche Aussagen über MIME-Typen sind korrekt?
Was this page helpful?