Passer au contenu principal

Une astuce toute bête, qui semblera évidente pour les stars du développement Web, mais pas forcément pour tout le monde et qui préservera les cheveux de ceux qui ne sont pas des pros. 🙂

Nous allons parler des types MIME, un truc simple et pourtant qui peut pourrir la vie de bien des développeurs en herbe dont je fais partie.

Les types MIME, c’est quoi ?

Les types MIME ont été inventés pour permettre aux navigateurs d’identifier facilement à quel type de données ils ont affaire. Vous me direz qu’avec les fichiers binaires ce n’est pas obligatoire car on peut s’en sortir en se basant sur les magic numbers qui permettent d’identifier de nombreux types de fichiers binaires. Ces derniers se trouvent dans les tous premiers octets d’un fichier binaire. Par exemple le magic number des fichiers .class de Java est 0xcafebabe (essayez à l’éditeur hexa, vous verrez 😉 ).

Sauf que ça ne fonctionne pas pour les données textuelles. Alors pour ces dernières on pourrait tout à fait utiliser les extensions de fichier pour s’en sortir… Sauf que là encore pour une page web, celle-ci peut avoir l’extension .html, .htm, .jsp, d’autres encore voire pas d’extension du tout. Et là pour le navigateur ça devient impossible de savoir avec quoi ouvrir le flux de données.

C’est là qu’intervient le type MIME, qui permet justement d’identifier les données envoyées par le serveur web. Ce type est indiqué dans l’en-tête de la réponse serveur, sous le header Content-Type.

Et alors, je ne comprends toujours pas où vous voulez en venir…

Bon alors ce qui suit m’est arrivé il y a deux jours. Je n’arrivais pas à faire fonctionner sous Internet Explorer 9 une application IE-only (beurk) qui contenait des horreurs du style :


this.style.behavior = 'url(foo/bar)';

Pour la petite histoire le tag CSS behavior, IE-only et heureusement, permettait d’insérer du code Javascript via une CSS, par l’intermédiaire du mécanisme des HTC (HTML Components). C’est là un trou de sécurité potentiel, du code exécutable appelé depuis une couche de présentation, et ça explique probablement en grande partie pourquoi ça n’a jamais été supporté par d’autres browsers et ça ne l’est plus par IE10 et supérieur.

Enfin bref, revenons à nos moutons. Quand on exécutait ce code via les outils développeur d’Internet Explorer en passant sur un autre mode navigateur qu’IE9 tout fonctionnait, mais rien à faire pour ce dernier.

Après des heures de recherche sur Internet, il s’est avéré que l’erreur était très simple : le type MIME pour les fichiers HTC n’était pas déclaré côté serveur. Les anciennes versions d’IE s’en moquaient, mais plus la version 9, allez comprendre.

Bref la solution était simple, il suffisait d’ajouter dans le fichier mime.types du serveur Apache la ligne suivante :


text/x-component                    htc

Ensuite il suffisait de redémarrer Apache et le tour était joué.

Et alors ?

Tout ça pour vous dire que la prochaine fois qu’en faisant du développement Web vous voyez qu’un fichier ne semble pas s’ouvrir correctement depuis le navigateur, voire pas du tout, alors que tout semble par ailleurs correct allez vérifier vos types MIME côté serveur.

Un indice qui peut vous guider est d’inspecter les headers HTTP avec un outil comme Firebug. Si vous observez un truc comme ci-dessous il faut agir côté serveur :


Content-Type: application/unknown

A noter toutefois que pour les données binaires il y a de bonnes chances que le navigateur s’en sorte quand même en utilisant les magic numbers, mais ça dépend vraiment du logiciel utilisé pour visualiser votre page Web…

Cet article vous a plu ? Vous aimerez sûrement aussi :

Julien
Moi c’est Julien, ingénieur en informatique avec quelques années d’expérience. Je suis tombé dans la marmite étant petit, mon père avait acheté un Apple – avant même ma naissance (oui ça date !). Et maintenant je me passionne essentiellement pour tout ce qui est du monde Java et du système, les OS open source en particulier.

Au quotidien, je suis devops, bref je fais du dév, je discute avec les opérationnels, et je fais du conseil auprès des clients.

Son Twitter Son LinkedIn

Laisser un commentaire