Types MIME courants

Les serveurs et les formulaires d’envoi reposent sur ces chaînes ; un type erroné peut casser aperçus, téléchargements ou la CSP.

Mis à jour:

CatégorieType MIMEExtension type
HTMLtext/html.html
CSStext/css.css
JavaScripttext/javascript.js
JSONapplication/json.json
XMLapplication/xml.xml
Texte bruttext/plain.txt
CSVtext/csv.csv
PDFapplication/pdf.pdf
ZIPapplication/zip.zip
PNGimage/png.png
JPEGimage/jpeg.jpg
GIFimage/gif.gif
WebPimage/webp.webp
SVGimage/svg+xml.svg
ICOimage/x-icon.ico
MP3audio/mpeg.mp3
WAVaudio/wav.wav
MP4video/mp4.mp4
WebMvideo/webm.webm
WOFF2font/woff2.woff2
Formulaire encodé URLapplication/x-www-form-urlencoded—
Formulaire multipartmultipart/form-data—

Notes

Ce que le type MIME contrôle réellement

Un type MIME est l'étiquette qu'un serveur attache à une réponse pour indiquer au navigateur la nature des octets. text/html affiche une page, application/pdf ouvre un lecteur, image/svg+xml peut être rendu en ligne et application/octet-stream déclenche une invite de téléchargement. Deux fichiers identiques peuvent se comporter complètement différemment selon ce seul en-tête. Les navigateurs, les formulaires de téléversement, les clients de messagerie et les règles de sécurité des contenus le lisent tous ; une erreur à ce niveau est une cause fréquente d'aperçus cassés, de téléchargements forcés et de scripts bloqués.

Où s'appliquent text/ et application/ aujourd'hui

Les conseils anciens indiquaient application/javascript pour le JavaScript ; la norme actuelle est text/javascript et application/javascript est obsolète. Le CSS est text/css, le HTML est text/html, le texte brut est text/plain et le CSV est text/csv — tous sont text/* parce qu'ils ont été conçus pour être lisibles par un humain. Les formats structurés relèvent de application/* : application/json, application/xml, application/pdf, application/zip. L'exception notable est SVG, qui est du XML mais doit être servi comme image/svg+xml afin que les navigateurs le rendent plutôt que de le télécharger.

Les mauvais types cassent les uploads et la sécurité

Un téléversement mal étiqueté est une source classique de bogues : un fichier JSON servi comme text/plain peut être refusé par un client d'API, une image retournée comme octet-stream se télécharge au lieu de s'afficher et un script servi comme text/html est bloqué par le navigateur. Les règles strictes de Content-Security-Policy reposent sur le type MIME ; une feuille de style servie avec le mauvais type peut ainsi être purement refusée. Lorsqu'un aperçu ou un téléchargement se comporte de manière étrange, vérifier le Content-Type de la réponse est généralement le diagnostic le plus rapide.

Jeux de caractères et détection de contenu

Pour les types textuels, associez le type MIME à un jeu de caractères : text/html; charset=utf-8 et application/json; charset=utf-8 sont les valeurs par défaut sûres pour tout contenu multilingue. Les anciens navigateurs utilisaient la détection de contenu pour deviner le type à partir des octets du fichier, ce que les attaquants ont exploité ; envoyer X-Content-Type-Options: nosniff indique aux navigateurs de faire confiance au type déclaré plutôt que de deviner. Envoyez toujours un Content-Type explicite et correct au lieu de vous fier à l'extension du fichier, que le navigateur ne consulte jamais.

Définir les types sur le serveur et dans les formulaires

L'origine du type compte. Les hébergeurs statiques mappent automatiquement les extensions, mais les frameworks web ont souvent besoin qu'il soit défini explicitement — dans Express avec res.type('json'), dans Nginx via le bloc types, et sur Cloudflare Pages par les en-têtes ou l'extension du fichier. Les formulaires HTML utilisent enctype pour contrôler l'encodage du téléversement : multipart/form-data pour les fichiers et application/x-www-form-urlencoded pour les champs classiques, tandis qu'une API attendant du JSON enverra application/json. Envoyer la mauvaise valeur est une source discrète de réponses 415 Unsupported Media Type et 400 qui paraissent mystérieuses tant qu'on n'a pas inspecté l'en-tête de la requête.

Autres familles à connaître

Au-delà des formats web courants, quelques familles méritent d'être repérées. Les polices utilisent font/woff2 et font/ttf. Les images se divisent par format — image/jpeg, image/png, image/webp, image/avif, image/gif — tandis que l'audio et la vidéo emploient audio/mpeg, audio/ogg, video/mp4 et video/webm. Les archives et les flux binaires sont application/zip, application/gzip et application/octet-stream. Lorsqu'une API retourne un fichier qu'elle ne peut pas identifier, octet-stream est la réponse honnête : elle force le client à télécharger plutôt qu'à deviner, ce qui correspond exactement au comportement attendu quand le contenu est inconnu.

Questions fréquentes

Quel type MIME utiliser pour un fichier .json ?
Utilisez application/json pour les fichiers JSON et les réponses d’API. C’est le type standard, à servir en UTF-8 si possible.
Quel est le type MIME des fichiers .js ?
Le type officiel de JavaScript est text/javascript. L’ancien application/javascript est obsolète et ne doit plus être utilisé.
Quel est le type MIME d’une image SVG ?
Les fichiers SVG utilisent image/svg+xml. Sans ce type, les navigateurs ne les affichent pas en ligne.

Références