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
Type/Sous-typeLa 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
type/sous-type;paramètre=valeurLes 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/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 :
| Type | Description | Exemple de sous-types courants |
|---|---|---|
| application | Contient des données binaires | application/javascript, application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf |
| audio | Fichier audio | audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav |
| font | Données de police/typographie | font/woff, font/ttf, font/otf |
| model | Données de modèle pour objets 3D | model/3mf, model/vrml |
| text | Document texte | text/plain, text/html, text/css, text/javascript |
| video | Fichier vidéo | video/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
multipart/form-data
multipart/byterangesLes types multipartites indiquent des documents composés de plusieurs parties, dont chacune peut avoir un type MIME différent.
| Type | Description | Exemple de sous-types courants |
|---|---|---|
| message | Message englobant d'autres messages | message/rfc822, message/partial |
| multipart | Données composées de plusieurs éléments | multipart/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 fichier | Type de média |
|---|---|
.html, .htm | text/html |
.css | text/css |
.js | application/javascript |
.json | application/json |
.png | image/png |
.jpg, .jpeg | image/jpeg |
.gif | image/gif |
.svg | image/svg+xml |
.mp3 | audio/mpeg |
.mp4 | video/mp4 |
.pdf | application/pdf |
.zip | application/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
location /api/data {
default_type application/json;
add_header Content-Type application/json;
}Apache (.htaccess)
AddType application/json .json
AddType text/css .cssNode.js (Express)
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 ?