Was ein MIME-Typ wirklich ist
Ein MIME-Typ, auch Medientyp genannt, ist ein kurzes Label, das Software mitteilt, welche Art von Daten eine Datei oder ein Nachrichtenkörper enthält. Er entstand in der E-Mail (der Name steht für Multipurpose Internet Mail Extensions), taucht heute aber überall im Web auf. Das Format ist immer type/subtype: eine breite Kategorie, ein Schrägstrich und ein spezifisches Format. So bedeutet text/html „Text, in HTML-Form", image/png bedeutet „ein Bild, in PNG-Form" und application/json bedeutet „Anwendungsdaten, als JSON kodiert".
Der übergeordnete Typ stammt aus einer festen Menge, die von der IANA, der offiziellen Registrierungsstelle, gepflegt wird: text, image, audio, video, application, font, model, multipart und einige neuere wie haptics. Der Subtyp ist das spezifische Format. Anbieter können eigene mit einem vnd.-Präfix hinzufügen (zum Beispiel application/vnd.ms-excel), und experimentelle Typen verwendeten früher ein x--Präfix, auch wenn diese Konvention heute nicht mehr empfohlen wird.

Wo MIME-Typen eine Rolle spielen
Der mit Abstand wichtigste Ort, an dem ein MIME-Typ auftaucht, ist der HTTP-Antwort-Header Content-Type. Wenn ein Server eine Seite, ein Bild oder eine API-Nutzlast sendet, teilt dieser Header dem Browser mit, wie die Bytes zu interpretieren sind. Lautet der Header text/html, rendert der Browser Markup; lautet er application/json, kann ein fetch()-Aufruf ihn parsen; lautet er application/pdf, öffnet sich der eingebaute Betrachter. Derselbe Header reist auch auf der Anfrageseite mit: Wenn Sie ein Formular oder einen API-Körper per POST senden, teilt Content-Type dem Server mit, wie er das Gesendete lesen soll.
Über HTTP hinaus steuern MIME-Typen mehrere andere Systeme. E-Mail-Clients nutzen sie, um zu entscheiden, ob ein Anhang ein Bild zur Vorschau oder eine Binärdatei zum Speichern ist. Datei-Upload-Handler prüfen den deklarierten Typ, um Dateien anzunehmen oder abzulehnen. Und das Betriebssystem oder der Browser verwendet den Typ, nicht nur die Dateiendung, um eine Standardanwendung auszuwählen. Dieselbe Idee liegt zugrunde, wie Server Ergebnisse und Fehler neben den HTTP-Statuscodes melden — eine 200er-Antwort mit dem falschen Typ kann genauso kaputt sein wie ein 404.
Die, die Sie täglich verwenden
Eine Handvoll Typen deckt den überwältigenden Großteil des realen Datenverkehrs ab:
text/html— Webseiten (Endung.html)text/css— Stylesheets (.css)text/javascript— der empfohlene Typ für JavaScript (.js,.mjs)application/json— der eine offizielle JSON-Typ, definiert in RFC 8259 (.json)image/png,image/jpeg,image/webp,image/svg+xml— gängige Bildformateapplication/pdf— PDF-Dokumente (.pdf)application/octet-stream— der Auffangtyp für unbekannte oder beliebige Binärdatentext/plain— der Standard für reinen Text ohne reicheren Typ
JSON verdient eine Anmerkung, weil es Menschen ins Stolpern bringt. Der einzig korrekte Typ ist application/json. Älterer Code verwendete manchmal text/json, text/plain oder application/x-javascript, doch diese sind veraltet, und manche Clients weigern sich, sie zu parsen. Für JSON gibt es auch keinen Charset-Parameter — die Spezifikation schreibt UTF-8 vor, daher ist die Angabe application/json; charset=utf-8 überflüssig, wenn auch harmlos. Eine umfassendere Tabelle der Formate und Endungen finden Sie in unseren Referenztabellen.

Warum ein falscher Content-Type Dinge kaputtmacht
Browser und Clients vertrauen dem deklarierten Typ, daher hat es konkrete Folgen, ihn falsch anzugeben. Liefern Sie eine JSON-API-Antwort als text/html aus, versucht der Browser womöglich, sie zu rendern, oder ein strikter Client wirft einen Parse-Fehler, bevor Ihr Code überhaupt läuft. Liefern Sie eine CSS- oder JavaScript-Datei mit dem falschen Typ aus, sorgt ein Sicherheitsmerkmal namens X-Content-Type-Options: nosniff dafür, dass der Browser sich weigert, sie anzuwenden, und bricht so stillschweigend Ihr Seitenlayout oder Ihre Skripte.
Downloads sind das andere klassische Versagen. Wenn Sie möchten, dass eine Datei heruntergeladen statt angezeigt wird, ist neben dem Header Content-Disposition auch der Typ entscheidend. Ein als application/octet-stream gesendetes PDF wird als generische Datei heruntergeladen, statt sich im Betrachter zu öffnen; ein als text/plain gesendetes Bild erscheint als Kauderwelsch-Zeichen. Auf der Upload-Seite kann eine falsch beschriftete Datei an einer naiven Endungsprüfung vorbeisegeln, weshalb robuste Prüfprogramme die echten Bytes (die „Magic Number") inspizieren, statt dem vom Client gelieferten Typ zu vertrauen.
Historisch versuchten Browser, den echten Typ zu erraten oder zu „erschnüffeln", wenn der Header falsch aussah. Dieses Verhalten verursachte Sicherheitslücken, daher ist es heute bewährte Praxis, stets einen korrekten Content-Type zu senden und das Sniffing mit nosniff abzuschalten. Kurzfassung: Setzen Sie den Typ bei jeder Antwort bewusst, und die meisten Render-, Download- und Parse-Fehler verschwinden.
Häufig gestellte Fragen
Was ist der Unterschied zwischen einem MIME-Typ und einem Medientyp?
Sie sind dasselbe. „MIME-Typ" ist der ältere Name aus der E-Mail, während „Medientyp" der Begriff ist, den IANA und moderne HTTP-Spezifikationen bevorzugen. Beide verweisen auf das Label aus Typ/Subtyp.
Was ist der korrekte MIME-Typ für JSON?
Es ist application/json, definiert in RFC 8259. Ältere Alternativen wie text/json oder application/x-javascript sind veraltet, und manche Clients lehnen sie ab.
Was bedeutet application/octet-stream?
Es ist der generische Typ für beliebige Binärdaten ohne spezifischeres Label. Server verwenden ihn als Rückfallebene für unbekannte Dateitypen, was meist einen Download statt einer Anzeige im Browser auslöst.
Warum lädt meine CSS- oder JavaScript-Datei nicht?
Oft sendet der Server sie mit dem falschen Content-Type. Mit X-Content-Type-Options auf nosniff weigert sich der Browser, CSS anzuwenden, das nicht text/css ist, oder Skripte, die kein JavaScript-Typ sind. Korrigieren Sie die Serverkonfiguration, damit der richtige Typ gesendet wird.
Kann ich einem MIME-Typ einen Charset hinzufügen?
Ja, bei Textformaten, mit einem Parameter wie text/html; charset=utf-8. Bei JSON ist es unnötig, weil das Format laut Spezifikation immer UTF-8 ist, das Hinzufügen schadet aber nicht.
Bestimmt die Dateiendung den MIME-Typ?
Nicht über HTTP. Der Server entscheidet, welchen Content-Type er sendet, und der Browser vertraut diesem Header. Die Endung dient nur als Hinweis für Werkzeuge und Betriebssysteme, wenn kein expliziter Typ angegeben ist.
