Le codage des données numériques
09/02/2005
 Christian CALECA 
Liste des cours

MIME

Accueil ] [ l'Ecriture ] [ Le code ASCII ] [ Autres astuces ] [ Dans le HTML ] [ MIME ]


MIME. C'est quoi ?

Multipurpose Internet Mail Extension. Comme son nom l'indique, c'est une suite d'extensions pour permettre, principalement aux e-mails, de transporter autre chose que du texte, à savoir, du son, des images, de la vidéo... Autant de choses pour lesquelles la messagerie n'est à priori pas faite.

Ces extensions servent également sur le web, lorsque l'on utilise HTTP pour transporter autre chose que du texte (ce qui est souvent le cas). Voyez le chapitre sur HTTP à ce propos.

MIME rassemble deux choses distinctes :

MIME et SMTP

C'est ici que MIME prend toute son importance. En effet, en plus de pouvoir définir des types de documents, il peut aussi définir des types d'encodages, comme Base64 ou Quoted-Printable.

Un seul exemple significatif. Il reprendra ce que nous avons eu l'occasion de voir par ailleurs.

Le message contient le texte ::

juste un texte légèrement accentué...
Suivi d'une image gif.

codé Quoted-Printable , suivi d'une image gif en pièce jointe. Voici le message tel qu'il est reçu :

Return-Path: <christian.caleca@free.fr>
...
From: "Christian Caleca" <christian.caleca@free.fr>
To: <christian.caleca@free.fr>
Subject: demo MIME
Date: Sat, 9 Nov 2002 11:29:09 +0100
MIME-Version: 1.0
Content-Type: multipart/mixed;
On est averti qu'il y aura plusieurs morceaux de type différents...boundary="----=_NextPart_000_0044_01C287E3.38B13A20"
Avec un séparateur bien défini.
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106

This is a multi-part message in MIME format.

------=_NextPart_000_0044_01C287E3.38B13A20
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
La partie texte, codée "quoted-printable"...

juste un texte l=E9g=E8rement accentu=E9...
Suivi d'une image gif.
Voilà qui est fait.
------=_NextPart_000_0044_01C287E3.38B13A20
Content-Type: application/octet-stream;
name="moineau1.gif"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="moineau1.gif"
On ne peut pas être plus précis :
	type :flux d'octets
	nom : moineau1.gif
	codage : Base64...
R0lGODlhcgH8APf/AP//////zP//mf//Zv//M///AP/M///MzP/Mmf/MZv/MM//MAP+Z//+ZzP+Z
...
GZACDvqwAvWAOgEBADs=

------=_NextPart_000_0044_01C287E3.38B13A20--

Comme prévu, ce message contient bien deux parties :

L'image, dans Outlook Express, va apparaître sous le texte, séparée par un filet horizontal.

Note pour les e-mails

Selon toute logique, le codage Base64 devrait pouvoir être universellement exploité dans la messagerie, puis qu'il permet à coup sûr de transporter correctement le message codé (sur 7 bits) et définit complètement la table de codage ASCII quelque soit l'alphabet utilisé par l'auteur.

Bien entendu, la situation n'est pas aussi simple. D'abord, les dernières versions de SMTP savent transporter du texte sur 8 bits, ce qui rend le codage inutile, ensuite, nombre de clients de messagerie ne savent pas encore décoder le Base64, voire le quoted-printable. Tous les clients qui ne sont pas compatibles MIME, et il y en a encore pas mal en service. Si bien que la méthode la plus efficace (la moins hasardeuse) reste d'utiliser la police iso-8859-1 sans aucun codage et de rédiger l'objet du message sans accents ni symboles particuliers, ça fera au moins ça de lisible à coup sûr.

MIME et HTTP

Nous en avons déjà un exemple dans le chapitre HTTP, pour transporter une image gif dans une page html. Mais dans ce cas, il n'y a pas de codage (type Base64 ou quoted-printable), les octets sont brutalement transportés par le protocole. MIME sert juste à définir le type de document.

Voici juste un exemple, où HTTP va transporter un document MS Word. La manipulation est faite avec Internet Explorer 6 et Mozilla 1.1 sur une plateforme Windows disposant de MS Word. Un sniffeur regarde ce qu'il se passe au niveau HTTP.

Avec Internet Explorer 6

Frame 4 (387 on wire, 387 captured)
    ...
Internet Protocol, Src Addr: 192.168.0.10, Dst Addr: 192.168.0.253
    ...
Hypertext Transfer Protocol
    GET /odj.doc HTTP/1.1\r\n
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, 
            application/vnd.ms-powerpoint, application/vnd.ms-excel, 
            application/msword, */*\r\n
    Nous le savons, IE6 accepte explicitement les fichiers au format MS Office
    si ce dernier est installé.
    Accept-Language: fr\r\n
    Accept-Encoding: gzip, deflate\r\n
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n
    Host: linux.maison.mrs\r\n
    Connection: Keep-Alive\r\n
    \r\n
Frame 6 (1514 on wire, 1514 captured)
    ...
Internet Protocol, Src Addr: 192.168.0.253, Dst Addr: 192.168.0.10
   ...
Hypertext Transfer Protocol
    HTTP/1.1 200 OK\r\n
    Date: Sat, 09 Nov 2002 09:32:41 GMT\r\n
    Server: Apache-AdvancedExtranetServer/1.3.26 (Mandrake Linux/6.1mdk) 
            auth_ldap/1.6.0 mod_ssl/2.8.10 OpenSSL/0.9.6g PHP/4.2.3\r\n
    Last-Modified: Thu, 06 Jul 2000 15:07:29 GMT\r\n
    ETag: "57d5a-7800-3964a0b1"\r\n
    Accept-Ranges: bytes\r\n
    Content-Length: 30720\r\n
    Keep-Alive: timeout=15, max=100\r\n
    Connection: Keep-Alive\r\n
    Content-Type: application/msword\r\n
    \r\n
    Apache connait le type MIME msword et signale le type de contenu,
    puis, commence à envoyer les données.
    Data (1067 bytes)
0000  d0 cf 11 e0 a1 b1 1a e1 00 00 00 00 00 00 00 00   ................
0010  00 00 00 00 00 00 00 00 3e 00 03 00 fe ff 09 00   ........>.......
...
    Les octets surlignés montrent à l'évidence que HTTP transporte sur 8 bits
Une fois la réception terminée, Internet Explorer va afficher directement le document, en utilisant MS Word comme "plug-in".

Avec Mozilla 1.1

Frame 6 (534 on wire, 534 captured)
    ...
Internet Protocol, Src Addr: 192.168.0.10, Dst Addr: 192.168.0.253
    ...
Hypertext Transfer Protocol
    GET /odj.doc HTTP/1.1\r\n
    Host: linux.maison.mrs\r\n
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) 
                Gecko/20020826\r\n
    Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,
            text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,
            text/css,*/*;q=0.1\r\n
    Mozilla ne connaît pas quant à lui les formats Microsoft.
    Accept-Language: fr-fr, en-us;q=0.66, en;q=0.33\r\n
    Accept-Encoding: gzip, deflate, compress;q=0.9\r\n
    Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66\r\n
    Plus respectueux de HTTP, il indique les jeux de caractères qu'il préfère
    iso-8859-1 (latin-1) d'abord, utf-8 (unicode) ensuite, * (n'importe quoi) enfin.
    Keep-Alive: 300\r\n
    Connection: keep-alive\r\n
    \r\n
 
Frame 8 (1514 on wire, 1514 captured)
    ...
Internet Protocol, Src Addr: 192.168.0.253, Dst Addr: 192.168.0.10
    ...
Hypertext Transfer Protocol
    HTTP/1.1 200 OK\r\n
    Date: Sat, 09 Nov 2002 09:35:06 GMT\r\n
    Server: Apache-AdvancedExtranetServer/1.3.26 (Mandrake Linux/6.1mdk) 
            auth_ldap/1.6.0 mod_ssl/2.8.10 OpenSSL/0.9.6g PHP/4.2.3\r\n
    Last-Modified: Thu, 06 Jul 2000 15:07:29 GMT\r\n
    ETag: "57d5a-7800-3964a0b1"\r\n
    Accept-Ranges: bytes\r\n
    Content-Length: 30720\r\n
    Keep-Alive: timeout=15, max=100\r\n
    Connection: Keep-Alive\r\n
    Content-Type: application/msword\r\n
    \r\n
    Data (1067 bytes)
0000  d0 cf 11 e0 a1 b1 1a e1 00 00 00 00 00 00 00 00   ................
0010  00 00 00 00 00 00 00 00 3e 00 03 00 fe ff 09 00   ........>.......

Rien de changé de ce côté là. Mozilla, une fois le fichier reçu proposera de l'enregistrer ou de l'afficher en démarrant MS Word, comme une application séparée.

Anecdotes diverses

Dans la lancée, la même manip, sous Linux (Mandrake 9, avec OpenOffice installé), avec le même Mozilla 1.1 et Konqueror 3.0.3. Les sniffs donnant toujours la même chose, inutile de les répéter.

configuration

Konqueror montre que l'on peut facilement le configurer de manière à ce qu'il ouvre la "bonne application" en fonction du type MIME annoncé. L'illustration ci-dessus montre la correction faite pour que Konqueror ouvre désormais les types application/msword avec OpenOffice Writer. L'objet de cette manipulation est, vous l'avez compris, de montrer l'intérêt du type MIME annoncé dans une transmission HTTP.

Conclusions

Ce chapitre vous aura, je l'espère, aidé à mieux comprendre :


Précédente ] [ Accueil ]