← Tous les outils

Référence des types MIME

Ce que sont les types MIME, comment fonctionne le format type/sous-type, où le Content-Type compte en HTTP et e-mail, les types courants et pourquoi un mauvais casse tout.
ExtensionType MIME

Ce qu'est réellement un type MIME

Un type MIME, également appelé type de média, est une courte étiquette qui indique aux logiciels quel genre de données contient un fichier ou le corps d'un message. Né dans le courrier électronique (le nom signifie Multipurpose Internet Mail Extensions), il apparaît aujourd'hui partout sur le web. Le format est toujours type/sous-type : une catégorie large, une barre oblique et un format précis. Ainsi text/html signifie « du texte, sous forme HTML », image/png signifie « une image, au format PNG », et application/json signifie « des données applicatives, encodées en JSON ».

Le type de premier niveau provient d'un ensemble fixe maintenu par l'IANA, le registre officiel : text, image, audio, video, application, font, model, multipart, et quelques plus récents comme haptics. Le sous-type est le format précis. Les fournisseurs peuvent ajouter les leurs avec un préfixe vnd. (par exemple application/vnd.ms-excel), et les types expérimentaux utilisaient historiquement un préfixe x-, bien que cette convention soit désormais déconseillée.

Icônes abstraites lumineuses de formats de fichiers triées dans des tuiles de catégories étiquetées sur fond indigo sombre
Chaque format de fichier correspond à une étiquette type/sous-type.

Où les types MIME comptent

L'endroit le plus important où apparaît un type MIME est l'en-tête de réponse HTTP Content-Type. Lorsqu'un serveur envoie une page, une image ou une charge utile d'API, cet en-tête indique au navigateur comment interpréter les octets. Si l'en-tête dit text/html, le navigateur affiche le balisage ; s'il dit application/json, un appel fetch() peut l'analyser ; s'il dit application/pdf, la visionneuse intégrée s'ouvre. Le même en-tête circule aussi côté requête : lorsque vous envoyez un formulaire ou un corps d'API en POST, Content-Type indique au serveur comment lire ce que vous avez envoyé.

Au-delà de HTTP, les types MIME font fonctionner plusieurs autres systèmes. Les clients de messagerie s'en servent pour décider si une pièce jointe est une image à prévisualiser ou un binaire à enregistrer. Les gestionnaires de téléversement inspectent le type déclaré pour accepter ou rejeter les fichiers. Et le système d'exploitation ou le navigateur utilise le type, et pas seulement l'extension de fichier, pour choisir l'application par défaut. La même idée sous-tend la façon dont les serveurs signalent résultats et erreurs avec les codes de statut HTTP — une réponse 200 avec le mauvais type peut être tout aussi cassée qu'une 404.

Ceux que vous utiliserez tous les jours

Une poignée de types couvre la grande majorité du trafic réel :

  • text/html — pages web (extension .html)
  • text/css — feuilles de style (.css)
  • text/javascript — le type recommandé pour JavaScript (.js, .mjs)
  • application/json — l'unique type JSON officiel, défini dans la RFC 8259 (.json)
  • image/png, image/jpeg, image/webp, image/svg+xml — formats d'image courants
  • application/pdf — documents PDF (.pdf)
  • application/octet-stream — le fourre-tout pour les données binaires inconnues ou arbitraires
  • text/plain — la valeur par défaut pour le texte brut sans type plus riche

JSON mérite une note car il piège bien des gens. Le seul type correct est application/json. Du code plus ancien utilisait parfois text/json, text/plain ou application/x-javascript, mais ceux-ci sont obsolètes et certains clients refuseront de les analyser. Il n'y a pas non plus de paramètre charset pour JSON — la spécification impose l'UTF-8, donc écrire application/json; charset=utf-8 est redondant bien qu'inoffensif. Pour un tableau plus complet de formats et d'extensions, consultez nos tableaux de référence.

Un paquet de données lumineux étiqueté d'un badge de type abstrait circulant à travers une connexion réseau
Le Content-Type voyage avec la charge utile sur HTTP.

Pourquoi un mauvais Content-Type casse tout

Les navigateurs et les clients font confiance au type déclaré, alors se tromper a des conséquences concrètes. Servez une réponse d'API JSON en text/html et le navigateur risque d'essayer de l'afficher, ou un client strict peut lever une erreur d'analyse avant même que votre code ne s'exécute. Servez un fichier CSS ou JavaScript avec le mauvais type et une fonctionnalité de sécurité appelée X-Content-Type-Options: nosniff empêchera le navigateur de l'appliquer, cassant silencieusement le style ou les scripts de votre page.

Les téléchargements sont l'autre échec classique. Si vous voulez qu'un fichier se télécharge plutôt que de s'afficher, le type compte aux côtés de l'en-tête Content-Disposition. Un PDF envoyé en application/octet-stream se télécharge comme un fichier générique au lieu de s'ouvrir dans la visionneuse ; une image envoyée en text/plain apparaît comme des caractères incompréhensibles. Côté téléversement, un fichier mal étiqueté peut passer une vérification d'extension naïve, c'est pourquoi les validateurs robustes inspectent les vrais octets (le « nombre magique ») plutôt que de faire confiance au type fourni par le client.

Historiquement, les navigateurs essayaient de deviner, ou « renifler » (sniffer), le vrai type quand l'en-tête semblait erroné. Ce comportement a causé des failles de sécurité, alors la bonne pratique moderne consiste à toujours envoyer un Content-Type exact et à désactiver le sniffing avec nosniff. En bref : définissez délibérément le type sur chaque réponse, et la plupart des bugs d'affichage, de téléchargement et d'analyse disparaissent.

Questions fréquentes

Quelle est la différence entre un type MIME et un type de média ?

C'est la même chose. « Type MIME » est l'ancien nom issu du courrier électronique, tandis que « type de média » est le terme que préfèrent l'IANA et les spécifications HTTP modernes. Les deux désignent l'étiquette type/sous-type.

Quel est le type MIME correct pour JSON ?

C'est application/json, défini dans la RFC 8259. Les anciennes alternatives comme text/json ou application/x-javascript sont obsolètes et certains clients les rejetteront.

Que signifie application/octet-stream ?

C'est le type générique pour les données binaires arbitraires sans étiquette plus précise. Les serveurs l'utilisent comme solution de repli pour les types de fichiers inconnus, ce qui déclenche généralement un téléchargement plutôt qu'un affichage dans le navigateur.

Pourquoi mon fichier CSS ou JavaScript ne se charge-t-il pas ?

Souvent, le serveur l'envoie avec le mauvais Content-Type. Avec X-Content-Type-Options réglé sur nosniff, le navigateur refuse d'appliquer un CSS qui n'est pas text/css ou des scripts qui ne sont pas d'un type JavaScript. Corrigez la configuration du serveur pour que le bon type soit envoyé.

Puis-je ajouter un charset à un type MIME ?

Oui, pour les formats texte, en utilisant un paramètre comme text/html; charset=utf-8. Pour JSON, c'est inutile car le format est toujours UTF-8 par spécification, bien que l'ajouter ne fasse pas de mal.

L'extension de fichier détermine-t-elle le type MIME ?

Pas sur HTTP. Le serveur décide quel Content-Type envoyer, et le navigateur fait confiance à cet en-tête. L'extension n'agit que comme indice pour les outils et les systèmes d'exploitation lorsqu'aucun type explicite n'est fourni.