Medientypen (MIME-Typen)
Ein Medientyp (früher bekannt als Multipurpose Internet Mail Extensions oder MIME-Typ) gibt die Natur und das Format eines Dokuments, einer Datei oder einer Ansammlung von Bytes an. MIME-Typen werden durch die IETF in RFC 6838 definiert und standardisiert.
Die Internet Assigned Numbers Authority (IANA) ist für alle offiziellen MIME-Typen verantwortlich, und Sie können die aktuellste und vollständigste Liste auf ihrer Medientypen Seite finden.
Warnung:
Browser verwenden den MIME-Typ, nicht die Dateierweiterung, um zu bestimmen, wie eine URL verarbeitet werden soll.
Es ist daher wichtig, dass Webserver den korrekten MIME-Typ im Content-Type
-Header der Antwort senden.
Wenn dies nicht korrekt konfiguriert ist, werden Browser wahrscheinlich den Inhalt von Dateien falsch interpretieren, Websites funktionieren nicht richtig, und heruntergeladene Dateien können falsch behandelt werden.
Struktur eines MIME-Typs
Ein MIME-Typ besteht am häufigsten aus zwei Teilen: einem Typ und einem Subtyp, die durch einen Schrägstrich (/
) getrennt sind — ohne Leerzeichen dazwischen:
type/subtype
Der Typ repräsentiert die allgemeine Kategorie, in die der Dateityp fällt, wie etwa video
oder text
.
Der Subtyp identifiziert die genaue Art der Daten des angegebenen Typs, die der MIME-Typ darstellt. Zum Beispiel könnte der Subtyp für den MIME-Typ text
plain
(unformatierter Text), html
(HTML-Quellcode) oder calendar
(für iCalendar/.ics
Dateien) sein.
Jeder Typ hat seinen eigenen Satz möglicher Subtypen. Ein MIME-Typ hat immer einen Typ und einen Subtyp, nie nur einen oder den anderen.
Ein optionaler Parameter kann hinzugefügt werden, um zusätzliche Details bereitzustellen:
type/subtype;parameter=value
Beispielsweise kann bei jedem MIME-Typ, dessen Haupttyp text
ist, der optionale charset
-Parameter hinzugefügt werden, um das verwendete Zeichensatz für die Zeichen in den Daten zu spezifizieren. Wenn kein charset
angegeben wird, ist der Standard ASCII (US-ASCII
), es sei denn, dies wird durch die Einstellungen des Benutzeragenten überschrieben. Um eine UTF-8-Textdatei anzugeben, wird der MIME-Typ text/plain;charset=UTF-8
verwendet.
MIME-Typen sind nicht fallunterscheidend, werden jedoch traditionell in Kleinbuchstaben geschrieben. Die Parameterwerte können fallunterscheidend sein.
Typen
Es gibt zwei Klassen von Typen: diskrete und mehrteilige. Diskrete Typen sind Typen, die eine einzelne Datei oder ein Medium repräsentieren, wie z.B. eine einzelne Text- oder Musikdatei oder ein einzelnes Video. Ein mehrteiliger Typ repräsentiert ein Dokument, das aus mehreren Komponenten besteht, von denen jede ihren eigenen individuellen MIME-Typ haben kann; oder ein mehrteiliger Typ kann mehrere Dateien einkapseln, die in einer Transaktion zusammen gesendet werden. Zum Beispiel werden mehrteilige MIME-Typen verwendet, wenn mehrere Dateien an eine E-Mail angehängt werden.
Diskrete Typen
Die derzeit bei der IANA registrierten diskreten Typen sind:
application
-
Jede Art von binären Daten, die nicht explizit in eine der anderen Typen fällt; entweder Daten, die auf irgendeine Weise ausgeführt oder interpretiert werden oder binäre Daten, die eine spezifische Anwendung oder Kategorie von Anwendungen zur Verwendung benötigen. Generische Binärdaten (oder Binärdaten, deren wahrer Typ unbekannt ist) sind
application/octet-stream
. Andere gängige Beispiele sindapplication/pdf
,application/pkcs8
undapplication/zip
. (Siehe Anwendungs-Typen-Registry bei IANA) audio
-
Audio- oder Musikdaten. Beispiele sind
audio/mpeg
,audio/vorbis
. (Siehe Audio-Typen-Registry bei IANA) example
-
Reserviert zur Verwendung als Platzhalter in Beispielen, die zeigen, wie MIME-Typen verwendet werden. Diese sollten niemals außerhalb von Muster-Code-Listings und Dokumentationen verwendet werden.
example
kann auch als Subtyp verwendet werden; zum Beispiel kann in einem Beispiel, das sich auf die Arbeit mit Audio im Web bezieht, der MIME-Typaudio/example
verwendet werden, um anzuzeigen, dass der Typ ein Platzhalter ist und durch einen passenden ersetzt werden sollte, wenn der Code in der realen Welt verwendet wird. font
-
Schriftart-/Schriftzeichendaten. Gängige Beispiele sind
font/woff
,font/ttf
undfont/otf
. (Siehe Schriftarten-Typen-Registry bei IANA) image
-
Bild- oder grafische Daten, einschließlich Bitmap- und Vektor-Standbilder sowie animierte Versionen von Standbildformaten wie animierte GIF oder APNG. Häufige Beispiele sind
image/jpeg
,image/png
undimage/svg+xml
. (Siehe Bildtypen-Registry bei IANA) model
-
Modelldaten für ein 3D-Objekt oder eine Szene. Beispiele sind
model/3mf
undmodel/vrml
. (Siehe Modelltypen-Registry bei IANA) text
-
Nur Textdaten, einschließlich beliebiger menschlich lesbarer Inhalte, Quellcodes oder Textdaten wie CSV-formatierte Daten. Beispiele sind:
text/plain
,text/csv
undtext/html
. (Siehe Texttypen-Registry bei IANA) video
-
Videodaten oder -dateien, wie MP4-Filme (
video/mp4
). (Siehe Videotypen-Registry bei IANA)
Für Textdokumente ohne einen spezifischen Subtyp sollte text/plain
verwendet werden. Ebenso sollte für Binärdokumente ohne einen spezifischen oder bekannten Subtyp application/octet-stream
verwendet werden.
Mehrteilige Typen
Mehrteilige Typen kennzeichnen eine Kategorie von Dokumenten, die in Stücke zerlegt sind, oft mit verschiedenen MIME-Typen; sie können auch verwendet werden — insbesondere in E-Mail- Szenarien — um mehrere, separate Dateien darzustellen, die alle Teil derselben Transaktion sind. Sie repräsentieren ein zusammengesetztes Dokument.
Außer multipart/form-data
, das in der POST
-Methode von HTML-Formularen verwendet wird, und multipart/byteranges
, das mit 206
Partial Content
verwendet wird, um Teil eines Dokuments zu senden, behandelt HTTP mehrteilige Dokumente nicht auf besondere Weise: Die Nachricht wird an den Browser übertragen (der wahrscheinlich ein "Speichern unter"-Fenster anzeigt, wenn er nicht weiß, wie das Dokument angezeigt werden soll).
Es gibt zwei mehrteilige Typen:
message
-
Eine Nachricht, die andere Nachrichten einkapselt. Dies kann verwendet werden, um z.B. eine E-Mail darzustellen, die eine weitergeleitete Nachricht als Teil ihrer Daten enthält, oder um das Senden sehr großer Nachrichten in Teilen wie mehrere Nachrichten zu erlauben. Beispiele sind
message/rfc822
(für weitergeleitete oder beantwortete Nachrichtenzitate) undmessage/partial
, um ein großes Nachricht automatisch in kleinere zu unterteilen, damit der Empfänger sie wieder zusammensetzen kann. (Siehe Nachrichtentypen-Registry bei IANA) multipart
-
Daten, die aus mehreren Komponenten bestehen, die jeweils möglicherweise unterschiedliche MIME-Typen haben. Beispiele sind
multipart/form-data
(für Daten, die mit derFormData
API erzeugt werden) undmultipart/byteranges
(definiert in RFC 7233, Abschnitt 5.4.1 und verwendet mit HTTP's206
"Partieller Inhalt" Antwort, wenn die abgerufenen Daten nur ein Teil des Inhalts sind, wie es mit demRange
-Header geliefert wird). (Siehe mehrteilige Typen-Registry bei IANA)
Wichtige MIME-Typen für Webentwickler
application/octet-stream
Dies ist der Standard für Binärdateien. Da es unbekannte binäre Datei bedeutet, führen Browser es normalerweise nicht aus oder fragen sogar, ob es ausgeführt werden soll. Sie behandeln es so, als ob der Content-Disposition
-Header auf attachment
gesetzt wäre, und schlagen einen "Speichern unter"-Dialog vor.
text/plain
Dies ist der Standard für Textdateien. Auch wenn es wirklich "unbekannte Textdatei" bedeutet, gehen Browser davon aus, dass sie es anzeigen können.
Hinweis: text/plain
bedeutet nicht "jede Art von Textdaten".
Wenn sie eine bestimmte Art von Textdaten erwarten, werden sie es wahrscheinlich nicht als Übereinstimmung ansehen.
Insbesondere wenn sie eine text/plain
-Datei aus einem <link>
-Element herunterladen, das eine CSS-Datei deklariert, werden sie es nicht als gültige CSS-Datei erkennen, wenn sie mit text/plain
präsentiert wird.
Der CSS-Mime-Typ text/css
muss verwendet werden.
text/css
CSS-Dateien, die zur Gestaltung einer Webseite verwendet werden, müssen mit text/css
gesendet werden.
Wenn ein Server das .css
-Suffix für CSS-Dateien nicht erkennt, können sie mit den MIME-Typen text/plain
oder application/octet-stream
gesendet werden.
In diesem Fall werden sie von den meisten Browsern nicht als CSS erkannt und ignoriert.
text/html
Alle HTML-Inhalte sollten mit diesem Typ bereitgestellt werden. Alternative MIME-Typen für XHTML (wie application/xhtml+xml
) sind heutzutage weitestgehend nutzlos.
Hinweis:
Verwenden Sie application/xml
oder application/xhtml+xml
, wenn Sie die strengen Parsingregeln von XML, <![CDATA[…]]>
-Abschnitte oder Elemente möchten, die nicht aus den HTML/SVG/MathML-Namensräumen stammen.
text/javascript
Laut dem IANA Media Types Registry, RFC 9239, und der HTML-Spezifikation sollte JavaScript-Inhalt immer mit dem MIME-Typ text/javascript
bereitgestellt werden.
Keine anderen MIME-Typen werden für JavaScript als gültig angesehen, und die Verwendung eines anderen MIME-Typs als text/javascript
kann dazu führen, dass Skripte nicht geladen oder ausgeführt werden.
Sie könnten einige JavaScript-Inhalte finden, die fälschlicherweise mit einem charset
-Parameter als Teil des MIME-Typs bereitgestellt werden — als Versuch, den Zeichensatz für den Skriptinhalt anzugeben.
Dieser charset
-Parameter ist für JavaScript-Inhalte nicht gültig und führt in den meisten Fällen dazu, dass ein Skript nicht geladen wird.
application/json
JavaScript Object Notation (JSON) ist ein standardisiertes textbasiertes Format zur Darstellung strukturierter Daten basierend auf der JavaScript-Objektsyntax. Es wird häufig zum Übertragen von Daten in Webanwendungen verwendet.
Veraltete JavaScript-MIME-Typen
Zusätzlich zu dem text/javascript
MIME-Typ, erlaubt der MIME Sniffing Standard
(die Definition, wie Browser MIME-Typen interpretieren und herausfinden sollen,
was mit Inhalten zu tun ist, die keinen gültigen haben) aus historischen Gründen auch, dass JavaScript mit einem der folgenden veralteten JavaScript-MIME-Typen bereitgestellt wird:
application/javascript
Veraltetapplication/ecmascript
Veraltetapplication/x-ecmascript
Nicht standardisiertapplication/x-javascript
Nicht standardisierttext/ecmascript
Veraltettext/javascript1.0
Nicht standardisierttext/javascript1.1
Nicht standardisierttext/javascript1.2
Nicht standardisierttext/javascript1.3
Nicht standardisierttext/javascript1.4
Nicht standardisierttext/javascript1.5
Nicht standardisierttext/jscript
Nicht standardisierttext/livescript
Nicht standardisierttext/x-ecmascript
Nicht standardisierttext/x-javascript
Nicht standardisiert
Hinweis:
Auch wenn ein bestimmter Benutzeragent möglicherweise alle oder einige davon unterstützt, sollten Sie nur text/javascript
verwenden.
Dies ist der einzige MIME-Typ, der jetzt und in Zukunft garantiert funktioniert.
Bildtypen
Dateien, deren MIME-Typ image
ist, enthalten Bilddaten.
Der Subtyp gibt an, welches spezifische Bilddateiformat die Daten darstellen.
Die folgenden Bildtypen werden häufig genug verwendet, um als sicher für die Verwendung auf Webseiten angesehen zu werden:
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 für Bilddateitypen und -formate bietet Informationen und Empfehlungen, wann die verschiedenen Bildformate verwendet werden sollten.
Audio- und Videotypen
Wie es bei Bildern der Fall ist, schreibt HTML nicht vor, dass Webbrowser bestimmte Datei- und Codec-Typen für die <audio>
und <video>
-Elemente unterstützen müssen. Es ist daher wichtig, Ihre Zielgruppe und die Palette der Browser (und Versionen dieser Browser), die sie möglicherweise verwenden, zu berücksichtigen, wenn Sie den Dateityp und die Codecs für Medien auswählen.
Unser Leitfaden zu Mediendateiformaten bietet eine Liste der Dateitypen, die von Webbrowsern häufig unterstützt werden, einschließlich Informationen über ihre speziellen Anwendungsfälle, mögliche Nachteile, Kompatibilitätsinformationen sowie weitere Details.
Die Audio-Codec- und Video-Codec-Leitfäden listen die verschiedenen Codecs auf, die Webbrowser häufig unterstützen, und bieten Kompatibilitätsdetails sowie technische Informationen, wie viele Audiokanäle sie unterstützen, welche Art von Kompression verwendet wird und welche Bitraten sie nützlich sind. Der Leitfaden zu den Codecs, die von WebRTC verwendet werden erweitert dies, indem er speziell die von den wichtigsten Webbrowsern unterstützten Codecs abdeckt, sodass Sie die Codecs auswählen können, die die Palette der zu unterstützenden Browser am besten abdecken.
Was die MIME-Typen von Audio- oder Videodateien betrifft, so spezifizieren sie typischerweise das Containerformat (Dateityp). Der optionale codecs-Parameter kann zum MIME-Typ hinzugefügt werden, um weiter zu spezifizieren, welche Codecs verwendet werden sollen und welche Optionen zur Kodierung der Medien verwendet wurden, wie z.B. Codec-Profil, Ebene oder andere derartige Informationen.
Weitere Informationen zu allgemeinen Medientypen finden Sie auf der Seite Common MIME types.
multipart/form-data
Der Typ multipart/form-data
kann verwendet werden, wenn die Werte eines ausgefüllten HTML-Formulars vom Browser zum Server gesendet werden.
Als ein mehrteiliges Dokumentformat besteht es aus verschiedenen Teilen, die durch eine Begrenzung (eine Zeichenkette, die mit einem doppelten Bindestrich --
beginnt) begrenzt sind.
Jeder Teil ist eine eigene Entität mit eigenen HTTP-Headern, Content-Disposition
und Content-Type
für Datei-Upload-Felder.
Content-Type: multipart/form-data; boundary=aBoundaryString
(other headers associated with the multipart document as a whole)
--aBoundaryString
Content-Disposition: form-data; name="myFile"; filename="img.jpg"
Content-Type: image/jpeg
(data)
--aBoundaryString
Content-Disposition: form-data; name="myField"
(data)
--aBoundaryString
(more subparts)
--aBoundaryString--
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" value="test.txt" />
</label>
<button>Send the file</button>
</form>
wird diese Nachricht senden:
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 teilweise Antworten an den Browser zu senden.
Wenn der 206 Partial Content
-Statuscode gesendet wird, zeigt dieser MIME-Typ an, dass das Dokument aus mehreren Teilen besteht, für jeden der angeforderten Bereiche einen. Wie bei anderen mehrteiligen Typen verwendet der Content-Type
einen boundary
, um die Teile zu trennen. Jeder Teil hat einen Content-Type
-Header mit seinem eigentlichen Typ und einen Content-Range
des Bereichs, 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--
Bedeutung der korrekten Einstellung des MIME-Typs
Einige Serverkonfigurationen können den zugeordneten MIME-Typ verwenden, um Optimierungen wie Dateikombination, Kompression oder Caching durchzuführen. Siehe h5bp/server-configs-apache für ein Beispiel einer Apache-Konfiguration, die Dateien mit bestimmten MIME-Typen komprimiert.
Die meisten Webserver senden nicht erkannte Ressourcen mit dem MIME-Typ application/octet-stream
. Aus Sicherheitsgründen erlauben die meisten Browser nicht die Einstellung einer benutzerdefinierten Standardaktion (wie "Open in Word") für solche Ressourcen, wodurch der Benutzer gezwungen wird, es auf die Festplatte zu speichern, um es zu verwenden.
Einige häufige falsche Serverkonfigurationen:
- RAR-komprimierte Dateien. In diesem Fall wäre der ideale Fall der wahre Typ der Originaldateien; dies ist oft nicht möglich, da .RAR-Dateien mehrere Ressourcen unterschiedlicher Typen enthalten können. In diesem Fall sollten Sie den Server so konfigurieren, dass er
application/x-rar-compressed
sendet. - Audio und Video. Nur Ressourcen mit dem korrekten MIME-Typ werden in
<video>
oder<audio>
-Elementen abgespielt. Stellen Sie sicher, dass Sie den richtigen Medientyp für Audio und Video angeben. - Proprietäre Dateitypen. Ein spezifischer Typ wie
application/vnd.mspowerpoint
ermöglicht es Benutzern, solche Dateien automatisch in der Präsentationssoftware ihrer Wahl zu öffnen.
MIME-Sniffing
In Abwesenheit eines MIME-Typs oder in bestimmten Fällen, in denen Browser glauben, sie seien falsch, können Browser MIME-Sniffing durchführen — das Raten des korrekten MIME-Typs durch Betrachten der Bytes der Ressource.
Jeder Browser führt MIME-Sniffing anders und unter verschiedenen Umständen durch. (Zum Beispiel schaut Safari auf die Dateiendung in der URL, wenn der gesendete MIME-Typ ungeeignet ist.) Es gibt Sicherheitsbedenken, da einige MIME-Typen ausführbare Inhalte repräsentieren. Server können MIME-Sniffing verhindern, indem sie den X-Content-Type-Options
-Header senden.
Andere Methoden zur Übermittlung von Dokumenttypen
MIME-Typen sind nicht die einzige Möglichkeit, um Informationen über Dokumenttypen zu übermitteln:
- Dateinamen-Suffixe werden manchmal verwendet, insbesondere unter Microsoft Windows. Nicht alle Betriebssysteme betrachten diese Suffixe als bedeutungsvoll (wie Linux und macOS), und es gibt keine Garantie, dass sie korrekt sind.
- Magische Zahlen. Die Syntax verschiedener Formate ermöglicht die Dateitypinferenz durch Betrachtung ihrer Byte-Struktur. Zum Beispiel beginnen GIF-Dateien mit dem hexadezimalen Wert
47 49 46 38 39
(GIF89
), und PNG-Dateien mit89 50 4E 47
(.PNG
). Nicht alle Dateitypen haben magische Zahlen, daher ist dies auch nicht zu 100 % zuverlässig.