Medientypen (MIME-Typen)
Ein Medientyp (früher als Multipurpose Internet Mail Extensions- oder MIME-Typ bezeichnet) gibt die Art und das Format eines Dokuments, einer Datei oder einer Folge von Bytes an. MIME-Typen werden in RFC 6838 der IETF definiert und standardisiert.
Die Internet Assigned Numbers Authority (IANA) ist für alle offiziellen MIME-Typen zuständig. Die aktuellste und vollständigste Liste finden Sie auf ihrer Seite Media Types.
Warnung:
Browser verwenden den MIME-Typ, nicht die Dateiendung, um zu bestimmen, wie sie eine URL verarbeiten.
Deshalb müssen Webserver im Content-Type-Header der Antwort den richtigen MIME-Typ senden.
Ist dies nicht richtig konfiguriert, interpretieren Browser Dateiinhalte möglicherweise falsch, Websites funktionieren nicht ordnungsgemäß und heruntergeladene Dateien werden unter Umständen falsch behandelt.
Aufbau eines MIME-Typs
Ein MIME-Typ besteht meist aus nur zwei Teilen: einem Typ und einem Untertyp, die durch einen Schrägstrich (/) ohne Leerzeichen getrennt sind:
type/subtype
Der Typ bezeichnet die allgemeine Kategorie der Daten, beispielsweise video oder text.
Der Untertyp bezeichnet die genaue Art der Daten innerhalb des angegebenen Typs.
Beim Typ text kann der Untertyp beispielsweise plain (reiner Text), html (HTML-Quellcode) oder calendar (für iCalendar-/.ics-Dateien) sein.
Jeder Typ hat eigene mögliche Untertypen. Ein MIME-Typ enthält immer sowohl einen Typ als auch einen Untertyp, niemals nur einen der beiden.
Optional kann ein Parameter hinzugefügt werden, um weitere Einzelheiten anzugeben:
type/subtype;parameter=value
Bei jedem MIME-Typ mit dem Haupttyp text können Sie beispielsweise mit dem optionalen Parameter charset den für die Zeichen in den Daten verwendeten Zeichensatz angeben.
Wenn kein charset angegeben ist, gilt standardmäßig ASCII (US-ASCII), sofern die Einstellungen des User Agents nichts anderes festlegen.
Für eine UTF-8-Textdatei wird der MIME-Typ text/plain;charset=UTF-8 verwendet.
Bei MIME-Typen wird nicht zwischen Groß- und Kleinschreibung unterschieden; üblicherweise werden sie jedoch kleingeschrieben. Bei Parameterwerten kann die Groß- und Kleinschreibung relevant sein.
Typen
Es gibt zwei Klassen von Typen: diskrete und mehrteilige. Diskrete Typen stehen für eine einzelne Datei oder ein einzelnes Medium, etwa eine Text-, Musik- oder Videodatei. Ein mehrteiliger Typ steht für ein Dokument aus mehreren Bestandteilen, die jeweils einen eigenen MIME-Typ haben können. Er kann auch mehrere Dateien umfassen, die gemeinsam in einer Transaktion gesendet werden. Mehrteilige MIME-Typen werden beispielsweise verwendet, wenn mehrere Dateien an eine E-Mail angehängt werden.
Diskrete Typen
Derzeit sind bei der IANA folgende diskrete Typen registriert:
application-
Binärdaten, die nicht ausdrücklich unter einen der anderen Typen fallen: Daten, die auf irgendeine Weise ausgeführt oder interpretiert werden, oder Binärdaten, für deren Verwendung eine bestimmte Anwendung oder Anwendungskategorie erforderlich ist. Allgemeine Binärdaten (oder Binärdaten, deren tatsächlicher Typ unbekannt ist) erhalten den Typ
application/octet-stream. Weitere häufige Beispiele sindapplication/pdf,application/pkcs8,application/wasmundapplication/zip. (Siehe IANA-Register für den Typ „application“) audio-
Audio- oder Musikdaten. Beispiele sind
audio/mpegundaudio/vorbis. (Siehe IANA-Register für den Typ „audio“) example-
Für die Verwendung als Platzhalter in Beispielen reserviert, die den Umgang mit MIME-Typen zeigen. Außerhalb von Beispielcode und Dokumentation sollte dieser Typ niemals verwendet werden.
examplekann auch als Untertyp verwendet werden. In einem Beispiel zum Umgang mit Audio im Web kann etwa der MIME-Typaudio/exampleverdeutlichen, dass es sich um einen Platzhalter handelt, der beim tatsächlichen Einsatz des Codes durch einen passenden Typ ersetzt werden muss. font-
Schriftartdaten. Häufige Beispiele sind
font/woff,font/ttfundfont/otf. (Siehe IANA-Register für den Typ „font“) image-
Bild- oder Grafikdaten, darunter unbewegte Raster- und Vektorbilder sowie animierte Varianten unbewegter Bildformate wie animierte GIF-Dateien oder APNG. Häufige Beispiele sind
image/jpeg,image/pngundimage/svg+xml. (Siehe IANA-Register für den Typ „image“) model-
Modelldaten für ein 3D-Objekt oder eine Szene. Beispiele sind
model/3mfundmodel/vrml. (Siehe IANA-Register für den Typ „model“) text-
Reine Textdaten, darunter alle für Menschen lesbaren Inhalte, Quellcode und textbasierte Daten wie Daten im CSV-Format (kommagetrennte Werte). Beispiele sind
text/plain,text/csvundtext/html. (Siehe IANA-Register für den Typ „text“) video-
Videodaten oder -dateien, beispielsweise MP4-Filme (
video/mp4). (Siehe IANA-Register für den Typ „video“)
Für Textdokumente ohne spezifischen Untertyp sollte text/plain verwendet werden.
Ebenso sollte für Binärdokumente ohne spezifischen oder bekannten Untertyp application/octet-stream verwendet werden.
Mehrteilige Typen
Mehrteilige Typen bezeichnen eine Kategorie von Dokumenten, die in Bestandteile unterteilt sind, häufig mit unterschiedlichen MIME-Typen. Insbesondere bei E-Mails können sie auch mehrere getrennte Dateien darstellen, die alle zu derselben Transaktion gehören. Sie stehen für ein zusammengesetztes Dokument.
Mit Ausnahme von multipart/form-data, das bei der Methode POST für HTML-Formulare verwendet wird, und multipart/byteranges, das zusammen mit 206 Partial Content einen Teil eines Dokuments sendet, behandelt HTTP mehrteilige Dokumente nicht auf besondere Weise: Die Nachricht wird an den Browser übertragen. Wenn dieser nicht weiß, wie er das Dokument anzeigen soll, öffnet er wahrscheinlich ein „Speichern unter“-Fenster.
Es gibt zwei mehrteilige Typen:
message-
Eine Nachricht, die weitere Nachrichten enthält. Damit lässt sich beispielsweise eine E-Mail darstellen, die eine weitergeleitete Nachricht enthält, oder eine sehr große Nachricht in Teilen senden, als wären es mehrere Nachrichten. Beispiele sind
message/rfc822(für zitierte weitergeleitete oder beantwortete Nachrichten) undmessage/partial, mit dem eine große Nachricht automatisch in kleinere Nachrichten aufgeteilt und beim Empfänger wieder zusammengesetzt werden kann. (Siehe IANA-Register für den Typ „message“) multipart-
Daten aus mehreren Bestandteilen, die jeweils unterschiedliche MIME-Typen haben können. Beispiele sind
multipart/form-data(für Daten, die mit derFormData-API erzeugt wurden) undmultipart/byteranges(definiert in RFC 7233, Abschnitt 5.4.1 und verwendet bei HTTP-Antworten mit206„Partial Content“, wenn die abgerufenen Daten nur einen Teil des Inhalts umfassen, wie er beispielsweise mithilfe desRange-Headers angefordert wird). (Siehe IANA-Register für den Typ „multipart“)
Wichtige MIME-Typen für Webentwickler
>application/octet-stream
Dies ist der Standardtyp für Binärdateien. Da er für eine unbekannte Binärdatei steht, führen Browser sie in der Regel nicht aus und fragen meist auch nicht, ob sie ausgeführt werden soll. Sie behandeln sie so, als wäre der Content-Disposition-Header auf attachment gesetzt, und bieten einen „Speichern unter“-Dialog an.
text/plain
Dies ist der Standardtyp für Textdateien. Obwohl er genau genommen „unbekannte Textdatei“ bedeutet, gehen Browser davon aus, dass sie die Datei anzeigen können.
Hinweis:
text/plain bedeutet nicht „beliebige Art von Textdaten“.
Wenn Browser eine bestimmte Art von Textdaten erwarten, betrachten sie text/plain wahrscheinlich nicht als passend.
Laden sie beispielsweise über ein <link>-Element, das eine CSS-Datei deklariert, eine Datei mit dem Typ text/plain, erkennen sie diese nicht als gültige CSS-Datei.
Es muss der CSS-MIME-Typ text/css verwendet werden.
text/css
CSS-Dateien, mit denen eine Webseite gestaltet wird, müssen mit text/css gesendet werden.
Wenn ein Server die Endung .css nicht als Kennzeichen für CSS-Dateien erkennt, sendet er sie möglicherweise mit dem MIME-Typ text/plain oder application/octet-stream.
In diesem Fall erkennen die meisten Browser sie nicht als CSS und ignorieren sie.
text/html
Alle HTML-Inhalte sollten mit diesem Typ bereitgestellt werden. Alternative MIME-Typen für XHTML (wie application/xhtml+xml) sind heutzutage meist nicht sinnvoll.
Hinweis:
Verwenden Sie application/xml oder application/xhtml+xml, wenn Sie die strengen XML-Parsing-Regeln, <![CDATA[…]]>-Abschnitte oder Elemente außerhalb der HTML-, SVG- und MathML-Namespaces benötigen.
text/javascript
JavaScript-Inhalte sollten immer mit dem MIME-Typ text/javascript bereitgestellt werden.
Aus historischen Gründen unterstützen Browser möglicherweise einige der unten aufgeführten älteren JavaScript-Typen. Sie sollten jedoch nicht davon ausgehen, dass Skripte mit einem anderen MIME-Typ als text/javascript immer geladen oder ausgeführt werden.
Beachten Sie, dass das type-Attribut von <script>-Elementen in HTML nur die Essenz des JavaScript-MIME-Typs text/javascript oder eines der Schlüsselwörter module (für ES-Module) beziehungsweise importmap enthalten darf.
Wird im type-Attribut ein Parameter wie charset=utf-8 angegeben, entspricht dies einem nicht erkannten Wert: Der Skriptinhalt wird als Datenblock behandelt und nicht als JavaScript ausgeführt.
type="text/javascript" muss nicht mehr gesetzt werden. Dies ist der Standardwert für <script>-Elemente; Sie können das type-Attribut in diesem Fall also ganz weglassen.
Bei Verwendung des HTTP-Headers Content-Type können Sie den Parameter charset dagegen wie üblich optional angeben.
Weitere Informationen finden Sie im IANA-Register für Medientypen, in RFC 9239 und in der HTML-Spezifikation.
Ältere JavaScript-MIME-Typen
Neben dem MIME-Typ text/javascript erlaubt der MIME Sniffing Standard aus historischen Gründen auch die Bereitstellung von JavaScript mit einem der folgenden älteren JavaScript-MIME-Typen. Dieser Standard legt fest, wie Browser MIME-Typen interpretieren und mit Inhalten ohne gültigen MIME-Typ umgehen sollen:
application/javascriptapplication/ecmascriptapplication/x-ecmascriptapplication/x-javascripttext/ecmascripttext/javascript1.0text/javascript1.1text/javascript1.2text/javascript1.3text/javascript1.4text/javascript1.5text/jscripttext/livescripttext/x-ecmascripttext/x-javascript
Hinweis:
Auch wenn ein bestimmter User Agent einige oder alle dieser Typen unterstützen kann, sollten Sie nur text/javascript verwenden.
Nur bei diesem MIME-Typ ist gewährleistet, dass er jetzt und in Zukunft funktioniert.
application/json
JavaScript Object Notation (JSON) ist ein standardisiertes textbasiertes Format zur Darstellung strukturierter Daten, das auf der Syntax von JavaScript-Objekten beruht. Es wird häufig zur Datenübertragung in Webanwendungen verwendet.
Bildtypen
Dateien mit einem MIME-Typ der Kategorie image enthalten Bilddaten.
Der Untertyp gibt an, welches Bilddateiformat die Daten haben.
Die folgenden Bildtypen sind so weit verbreitet, dass sie für die Verwendung auf Webseiten als sicher gelten:
image/apng: Animated Portable Network Graphics (APNG)image/avif: AV1 Image File Format (AVIF)image/gif: Graphics Interchange Format (GIF)image/jpeg: Joint Photographic Expert Group image (JPEG)image/png: Portable Network Graphics (PNG)image/svg+xml: Scalable Vector Graphics (SVG)image/webp: Web Picture format (WEBP)
Der Leitfaden zu Bilddateitypen und -formaten enthält Informationen und Empfehlungen dazu, wann die verschiedenen Bildformate verwendet werden sollten.
Audio- und Videotypen
Wie bei Bildern schreibt HTML auch für die Elemente <audio> und <video> nicht vor, welche Datei- und Codec-Typen Webbrowser unterstützen müssen. Berücksichtigen Sie deshalb bei der Auswahl der Dateien und Codecs für Ihre Medien Ihre Zielgruppe sowie die Browser und Browserversionen, die diese möglicherweise verwendet.
Unser Leitfaden zu Mediencontainerformaten enthält eine Liste der Dateitypen, die Webbrowser häufig unterstützen. Neben weiteren Einzelheiten finden Sie dort Informationen zu besonderen Anwendungsfällen, möglichen Nachteilen und zur Kompatibilität.
Die Leitfäden zu Audio-Codecs und Video-Codecs führen verschiedene Codecs auf, die von Webbrowsern häufig unterstützt werden. Sie enthalten Angaben zur Kompatibilität sowie technische Informationen, etwa zur Anzahl unterstützter Audiokanäle, zur verwendeten Komprimierung und zu geeigneten Bitraten. Der Leitfaden zu den von WebRTC verwendeten Codecs ergänzt diese Informationen um die Codecs, die von den wichtigsten Webbrowsern unterstützt werden. So können Sie die Codecs auswählen, mit denen Sie möglichst viele der gewünschten Browser erreichen.
MIME-Typen von Audio- und Videodateien geben üblicherweise das Containerformat (den Dateityp) an.
Mit dem optionalen Parameter codecs können Sie genauer angeben, welche Codecs und welche Optionen zur Codierung des Mediums verwendet wurden, beispielsweise ein Codec-Profil oder -Level.
Weitere Informationen zu häufigen Medientypen finden Sie auf der Seite Häufige MIME-Typen.
multipart/form-data
Der Typ multipart/form-data kann verwendet werden, um die Werte eines ausgefüllten HTML-Formulars vom Browser an den Server zu senden.
Als mehrteiliges Dokumentformat besteht er aus verschiedenen Teilen, die durch eine Trennzeichenfolge (einen String, der mit einem doppelten Bindestrich -- beginnt) voneinander abgegrenzt sind.
Jeder Teil ist eine eigenständige Einheit mit eigenen HTTP-Headern, darunter Content-Disposition und bei Feldern zum Hochladen von Dateien Content-Type.
Content-Type: multipart/form-data; boundary=boundaryString
(other headers associated with the multipart document as a whole)
--boundaryString
Content-Disposition: form-data; name="myFile"; filename="img.jpg"
Content-Type: image/jpeg
(data)
--boundaryString
Content-Disposition: form-data; name="myField"
(data)
--boundaryString
(more subparts)
--boundaryString--
Das folgende <form>:
<form
action="http://localhost:8000/"
method="post"
enctype="multipart/form-data">
<label>Name: <input name="myTextField" value="Test" /></label>
<label><input type="checkbox" name="myCheckBox" /> Check</label>
<label> Upload file: <input type="file" name="myFile" /> </label>
<button>Send the file</button>
</form>
sendet diese Nachricht:
POST / HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498
Content-Length: 465
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myTextField"
Test
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myCheckBox"
on
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myFile"; filename="test.txt"
Content-Type: text/plain
Simple file.
-----------------------------8721656041911415653955004498--
multipart/byteranges
Der MIME-Typ multipart/byteranges wird verwendet, um Teilantworten an den Browser zu senden.
Wenn der Statuscode 206 Partial Content gesendet wird, gibt dieser MIME-Typ an, dass das Dokument aus mehreren Teilen besteht – einem für jeden angeforderten Bereich. Wie bei anderen mehrteiligen Typen verwendet der Content-Type-Header einen boundary-Parameter, um die Teile voneinander zu trennen.
Jeder Teil enthält einen Content-Type-Header mit seinem tatsächlichen Typ und einen Content-Range-Header mit dem Bereich, den er darstellt.
HTTP/1.1 206 Partial Content
Accept-Ranges: bytes
Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5
Content-Length: 385
--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 100-200/1270
eta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content
--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 300-400/1270
-color: #f0f0f2;
margin: 0;
padding: 0;
font-family: "Open Sans", "Helvetica
--3d6b6a416f9b5--
Warum der richtige MIME-Typ wichtig ist
Manche Serverkonfigurationen verwenden den zugeordneten MIME-Typ für Optimierungen wie das Zusammenfügen, Komprimieren oder Cachen von Dateien. Ein Beispiel für eine Apache-Konfiguration, die Dateien bestimmter MIME-Typen komprimiert, finden Sie unter h5bp/server-configs-apache.
Die meisten Webserver senden nicht erkannte Ressourcen mit dem MIME-Typ application/octet-stream.
Aus Sicherheitsgründen erlauben die meisten Browser nicht, für solche Ressourcen eine eigene Standardaktion festzulegen (etwa „In Word öffnen“). Stattdessen müssen Benutzer die Ressource zur Verwendung auf dem Datenträger speichern.
Einige häufige fehlerhafte Serverkonfigurationen betreffen:
- RAR-komprimierte Dateien.
Idealerweise würde hier der tatsächliche Typ der ursprünglichen Dateien verwendet. Das ist oft unmöglich, da .RAR-Dateien mehrere Ressourcen unterschiedlichen Typs enthalten können.
Konfigurieren Sie den Server in diesem Fall so, dass er
application/x-rar-compressedsendet. - Audio und Video.
In
<video>- oder<audio>-Elementen werden nur Ressourcen mit dem richtigen MIME-Typ abgespielt. Geben Sie unbedingt den richtigen Medientyp für Audio und Video an. - Proprietäre Dateitypen.
Ein spezifischer Typ wie
application/vnd.mspowerpointermöglicht es Benutzern, solche Dateien automatisch in der Präsentationssoftware ihrer Wahl zu öffnen.
MIME-Sniffing
Wenn ein MIME-Typ fehlt oder Browser ihn in bestimmten Fällen für falsch halten, können sie MIME-Sniffing durchführen: Sie versuchen, den richtigen MIME-Typ anhand der Bytes der Ressource zu erraten.
Jeder Browser führt MIME-Sniffing anders und unter anderen Umständen durch.
(Safari prüft beispielsweise die Dateiendung in der URL, wenn der gesendete MIME-Typ ungeeignet ist.)
Dies kann Sicherheitsrisiken mit sich bringen, da manche MIME-Typen ausführbare Inhalte bezeichnen.
Server können MIME-Sniffing verhindern, indem sie den X-Content-Type-Options-Header senden.
Weitere Methoden zur Angabe des Dokumenttyps
MIME-Typen sind nicht die einzige Möglichkeit, Informationen über den Dokumenttyp zu übermitteln:
- Dateiendungen werden mitunter verwendet, insbesondere unter Microsoft Windows. Nicht alle Betriebssysteme (etwa Linux und macOS) messen diesen Endungen Bedeutung bei, und es gibt keine Garantie, dass sie richtig sind.
- Magic Numbers. Aus der Syntax verschiedener Formate lässt sich anhand ihrer Bytestruktur auf den Dateityp schließen.
GIF-Dateien beginnen beispielsweise mit dem Hexadezimalwert
47 49 46 38 39(GIF89), PNG-Dateien mit89 50 4E 47(.PNG). Nicht alle Dateitypen haben Magic Numbers; daher ist auch diese Methode nicht zu 100 % zuverlässig.