Aller au contenu

Types MIME

Les Multipurpose Internet Mail Extensions, connus sous le nom de type MIME, sont une spécification qui étend le format des e-mails et qui est utilisée par les navigateurs et les serveurs pour identifier le type de contenu transféré. La spécification est normalisée dans la RFC 6838 de l'IETF RFC 6838. Un type MIME est une chaîne d'identification, et non une extension de fichier. Les navigateurs utilisent généralement le type MIME (et non l'extension de fichier) pour déterminer comment traiter un document ; c'est pourquoi il est important de configurer correctement les serveurs afin d'attacher le type MIME approprié à l'en-tête de réponse. S'il n'est pas configuré correctement, les navigateurs peuvent mal interpréter le contenu des fichiers et les sites ne fonctionneront pas correctement. Les fichiers téléchargés peuvent également être mal gérés.

Syntaxe

Types MIME

text
Type/Sous-type

La structure d'un type MIME est composée d'un type et d'un sous-type, séparés par une barre oblique (/), sans espaces. Les types MIME ne sont pas sensibles à la casse, mais ils sont généralement écrits en minuscules.

Un type MIME doit toujours comporter à la fois un type et un sous-type. Chaque type possède son ensemble de sous-types possibles.

Pour fournir des détails supplémentaires, vous pouvez utiliser un paramètre optionnel.

Types MIME

text
type/sous-type;paramètre=valeur

Les types MIME sont divisés en deux catégories : discrets et multipartites. Chacun possède des sous-types spécifiques.

Types discrets

Types MIME

text
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

Les types discrets indiquent la catégorie du document. Ils peuvent être l'un des suivants :

TypeDescriptionExemple de sous-types courants
applicationContient des données binairesapplication/javascript, application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf
audioFichier audioaudio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
fontDonnées de police/typographiefont/woff, font/ttf, font/otf
modelDonnées de modèle pour objets 3Dmodel/3mf, model/vrml
textDocument textetext/plain, text/html, text/css, text/javascript
videoFichier vidéovideo/webm, video/ogg

Pour décrire un document texte qui n'appartient pas à un sous-type particulier, on utilise text/plain. Les documents contenant des données binaires sans sous-type spécifique sont décrits à l'aide de application/octet-stream.

Types multipartites

Types MIME

text
multipart/form-data
multipart/byteranges

Les types multipartites indiquent des documents composés de plusieurs parties, dont chacune peut avoir un type MIME différent.

TypeDescriptionExemple de sous-types courants
messageMessage englobant d'autres messagesmessage/rfc822, message/partial
multipartDonnées composées de plusieurs élémentsmultipart/form-data, multipart/byteranges

Types MIME courants

Le tableau suivant liste les types MIME modernes et largement utilisés. De nombreux types hérités préfixés par x- (par ex. image/x-icon) sont dépréciés et doivent être évités dans les nouveaux projets. Pour une liste complète et officielle, consultez le registre des types de médias IANA.

Extension de fichierType de média
.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

Définition des en-têtes Content-Type

Les serveurs doivent envoyer l'en-tête Content-Type correct afin que les navigateurs sachent comment traiter la réponse. Voici quelques exemples rapides pour des environnements courants :

Nginx

nginx
location /api/data {
    default_type application/json;
    add_header Content-Type application/json;
}

Apache (.htaccess)

apache
AddType application/json .json
AddType text/css .css

Node.js (Express)

javascript
app.get('/api/status', (req, res) => {
    res.setHeader('Content-Type', 'application/json');
    res.send(JSON.stringify({ status: 'ok' }));
});

Pratique

Qu'est-ce que les types MIME et quelle est leur fonction ?

Trouvez-vous cela utile?

Aperçu dual-run — comparez avec les routes Symfony en production.