Types MIME

Consultez un tableau de référence des extensions de fichiers courantes et de leurs types MIME IANA, filtré par catégorie de niveau supérieur, pour définir le bon en-tête Content-Type à chaque fois.

De quel en-tête Content-Type ce fichier a-t-il besoin ? Saisissez une extension comme .webp ou une partie d'un type de média comme image pour filtrer le tableau. Chaque entrée suit le registre des types de média IANA et la liste des types courants du MDN.

Correspondances
Extension Type MIME

Ce que révèle un type MIME au navigateur

Anatomie d'un type de média

Un type MIME — plus correctement appelé type de média — est l'étiquette qu'un serveur attache à une réponse pour que le client sache comment traiter les octets qui suivent. Il comporte deux parties séparées par une barre oblique : un type de niveau supérieur comme text, image, audio, video, font, model ou application, et un sous-type qui nomme le format précis. image/png et application/json sont tous deux des types de média complets ; image seul ne l'est pas.

Un x- initial marquait autrefois un type expérimental, comme dans application/x-tar, et bien que la pratique soit obsolète, les noms survivants sont trop répandus pour être changés. Un +suffix final indique que le format repose sur une syntaxe plus générale : image/svg+xml est du XML, application/ld+json est du JSON, et un analyseur peut revenir à la syntaxe de base lorsqu'il ne reconnaît pas le format spécifique.

Certains types acceptent des paramètres après un point-virgule. Le plus important est charset, comme dans text/html; charset=utf-8. Le omettre sur une réponse texte incite le navigateur à deviner l'encodage, source classique de mojibake ; déclarer explicitement UTF-8 vaut donc toujours les caractères supplémentaires.

Pourquoi l'en-tête compte plus que l'extension

Les navigateurs décident quoi faire d'une réponse en fonction de l'en-tête Content-Type, et non du nom de fichier dans l'URL. Servir un PNG en text/plain affiche un mur de déchets binaires ; servir du JSON en text/html peut amener un client fetch à le rejeter. Définir le bon en-tête permet à un téléchargement de s'ouvrir dans la bonne application et à une ressource intégrée de s'afficher plutôt que d'être téléchargée.

La divergence a aussi des conséquences de sécurité. Les anciens navigateurs pratiquaient le MIME sniffing, inspectant les premiers octets d'une réponse et remplaçant un en-tête qu'ils jugeaient erroné. Un attaquant capable de téléverser un fichier ressemblant à du HTML pouvait le faire exécuter dans l'origine du site même si le serveur l'avait étiqueté comme image. L'en-tête X-Content-Type-Options: nosniff désactive ce comportement et est désormais une pratique standard sur tout point d'accès servant du contenu téléversé par l'utilisateur.

Pour les téléchargements, associez le type de média à Content-Disposition: attachment; filename="report.pdf". Le type de média décrit ce que sont les octets, la disposition décrit ce que le navigateur doit en faire, et les deux répondent à des questions différentes.

Où se trouve réellement le mapping

Il n'existe pas de table unique et faisant autorité extension-vers-type, ce qui surprend. L'IANA enregistre les types de média eux-mêmes, mais le mapping d'une extension de fichier vers un type est une convention locale maintenue par chaque serveur. Apache lit mime.types, nginx possède son propre fichier mime.types, et les frameworks d'application embarquent leurs propres tables de recherche. Voilà pourquoi le même fichier .wasm peut être servi correctement par un serveur et en application/octet-stream par un autre qui n'a pas été mis à jour.

application/octet-stream est le repli générique signifiant « données binaires arbitraires ». C'est la réponse honnête quand le format est vraiment inconnu, mais il empêche le rendu intégré ; il vaut donc ajouter un mapping explicite pour tout format que votre site sert régulièrement. Les formats plus récents comme AVIF, JXL et WebAssembly sont ceux qui manquent le plus souvent dans une configuration de serveur ancienne.

Note open-source : implémenté en JavaScript vanilla sans bibliothèque tierce.

FAQ

Pourquoi mon fichier se télécharge-t-il au lieu de s'afficher ?
Soit le type de média est `application/octet-stream`, soit la réponse comporte `Content-Disposition: attachment`. Définissez le type correct et supprimez la disposition attachment pour un rendu intégré.
Quel est le type MIME du JSON ?
`application/json`. D'anciens codes utilisaient parfois `text/json` ou `application/x-json`, mais aucun n'est enregistré et certains clients les rejettent.
Le JavaScript doit-il être text/javascript ou application/javascript ?
`text/javascript` est la forme recommandée actuellement. Les deux fonctionnent dans tous les navigateurs, mais la spécification HTML s'est arrêtée à la variante texte et répertorie la forme application comme obsolète.
Dois-je inclure charset ?
Pour les types textuels, oui. Sans cela, le navigateur devine, ce qui produit du mojibake pour le contenu non-ASCII. Envoyez `text/html; charset=utf-8` ou l'équivalent pour votre type.
Que signifie le suffixe +xml ou +json ?
Que le format repose sur une syntaxe plus générale. Un client qui ne connaît pas spécifiquement `application/ld+json` peut tout de même l'analyser comme du JSON, ce qui rend l'outillage générique possible.
Pourquoi mon serveur envoie-t-il le mauvais type pour .webp ou .avif ?
L'extension est absente du fichier `mime.types` de ce serveur. Ajoutez un mapping explicite dans la configuration du serveur ; le fichier lui-même est correct et n'a pas besoin d'être modifié.