Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Notas sobre Internet

[Home]  [Inicio]  [Índice]


N. 16:  El estándar MIME

§1  Sinopsis

MIME es acrónimo de "Multipurpose Internet Mail Extensions Encoding",  un estándar utilizado en Internet con dos finalidades: de un lado, normalizar el intercambio de todo tipo de archivos (texto, audio, vídeo, etc) en la Red; de otra, acabar con el problema de las transferencias de texto internacional por e-mail.

En esencia, el camino seguido para transmitir cualquier fichero es siempre el mismo: transformar (codificar) el fichero no ASCII ( E2.2.1a) en US-ASCII (haciéndolo al mismo tiempo compatible con el estándar SMTP "Simple Mail Transport Protocol"); transmitirlo en este formato, y reconvertirlo en destino al formato original (decodificarlo).  Aunque la descripción detallada del sistema MIME se saldría del propósito de estos apuntes, señalaremos que su funcionamiento se basa en:

  • 1.-  Clasificar los contenidos a transmitir según diversos tipos.

  • 2.-  Establecer que acción se toma para cada tipo de fichero que se transmite. Es decir, que tipo de codificación debe utilizarse para cada fichero.

Para lograrlo, de entre la enorme variedad de tipos de formatos (codecs) de ficheros utilizados, se acordó establecer unas tablas lo mas completas posibles en las que se indique que codificación debe utilizarse para cada tipo y subtipo. El sistema tiene la ventaja de que cuando aparece un nuevo tipo de formato (es frecuentísimo) solo hay que actualizar en los Navegadores y Agentes de Correo los pares de valores tipo-de-fichero/tipo-de-codec. Para evitar una excesiva proliferación de codificadores distintos, la IANA ("Internet Assigned Numbers Authority"    www.iana.org) se encarga de establecer las referidas tablas.

El estándar no solo ha sido integrado en los programas de correo, sino que se ha integrado en el protocolo HTTP de la Web, de forma que los servidores Web pueden identificar los tipos de ficheros que tienen que enviar a sus clientes. A su vez los navegadores pueden conocer la codificación a aplicar con cada uno de los contenidos recibidos.

Nota:  recientemente ha aparecido una variación del protocolo original denominado S/MIME, destinado a garantizar la seguridad de las comunicaciones y basado en el estándar de seguridad RSA Data Security. Aunque en este sentido compite con otra tecnología, PGP ("Prety Good Privacy").  Parece que al final acabarán coexistiendo ambas, la primera para usos empresariales y de comercio electrónico, y la segunda para uso particular.

En lo que se refiere al correo electrónico, una de las características principales de los sistemas de codificación MIME es que se han diseñado de forma que se mantenga sin modificación la mayor parte posible de texto (todos los caracteres que sean US-ASCII se transmitan sin modificación), solo son codificados aquellos caracteres "no estándar" que puedan tener problemas en alguna parte del sistema Internet.  De esta forma, si algún agente de correo no es conforme a MIME, el texto codificado todavía tendrá algún sentido (lo que ocurre cuando recibimos, o nos dicen que reciben, esos caracteres extraños intercalados en nuestros correos).

Nota:  por supuesto, cuando por cualquier causa, se desea que el e-mail no pueda ser leído ni descifrado, aún cuando fuera interceptado, se pueden utilizar sistemas de codificación mas severos que llegan a ser sistemas de cifra.

§2  Sistemas de codificación

Los sistemas MIME de codificar (encode) no ASCII en US-ASCII son los siguientes:

  • 7bit.  El utilizado por defecto.  Significa que el fichero es solo texto ASCII.  Las lineas deben ser "cortas", de 100 caracteres o menos, terminando con el par de caracteres "Retorno de carro" y "Nueva linea" CR-LF ("Carriage Return - Line Feed" ) un arcaísmo de cuando se utilizaban Teletipos.

  • Quoted-printable.  Utilizado por texto que es mayoritariamente US-ASCII (7 bit) pero con un pequeño porcentaje de caracteres "extraños" (8 bit).  Este es el caso típico del Español Castellano (ISO-8859-1) y otros idiomas occidentales, cuyos juegos de caracteres caen dentro de la categoría ISO-8859-n.

    En esta codificación, cada carácter de 8-bits es codificado en tres caracteres de 7 bits, el primero el signo igual (=) y el valor hexadecimal del carácter.  Por ejemplo, el controvertido carácter "ñ", "F1" en hexadecimal y 11110001 en binario, se codifica como "=F1".  El propio carácter "=" debe ser codificado (=3D) así como el espacio y la tabulación, que son codificados en =20 y =09 respectivamente.  Si una línea termina con "=" seguido del par CR-LF, estos tres caracteres son ignorados (lo que permite camuflar líneas muy largas).

    Las líneas no deben tener mas de 76 caracteres (sin contar los pares CR-LF finales), las más largas pueden ser fragmentadas en el proceso de codificación pero vuelven a unirse en el de decodificación.

  • Base64.  Se utiliza para contenidos que no han de ser leídos por personas o que, por cualquier otra causa, deben ser mantenidos tal-cual.  Cada 3 octetos (24 bits) se codifican en una secuencia de 4 caracteres escogidos de entre un grupo de 64 cuidadosamente seleccionados de entre los US-ASCII que se sabe que tienen menos problemas en las transmisiones.

  • 8bit.  Se utiliza cuando se trata de transmitir ficheros con caracteres de 8 bits con líneas "cortas" que terminan en CR-LF.  No es muy usual porque los caracteres de 8 bits no pueden ser enviados con seguridad mediante el estándar SMTP.  Es recomendable no usar transferencias codificadas en 8bit, pues se puede encontrar problemas a la hora de atravesar otras estafetas de correo en Internet y obtener errores como:

    .... while talking to cc-server9.massey.ac.nz.:
    >>> DATA
    <<< 554 8BIT SMTP extension not supported
    554 ... Service unavailable

    Sin embargo, el nuevo ESMTP (RFC1651) y la extensión RFC1652 pueden manejar mensajes de este tipo.

  • binary.  Como el anterior pero sin las terminaciones CR-LF.


Por supuesto que existen otros sistemas, como el denominado BinHex. (BINary HEXadecimal), un método para convertir ficheros binarios (no-ASCII) en ASCII, mas común en el mundo Macintosh y Uuencode ("Unix-to-Unix Encoding"), un esquema de codificación utilizado por UUCP [1] para copiar ficheros entre máquinas UNIX, del que existen diversas variantes.  Sin embargo, convienen recordar que no son estándar MIME y no deben ser utilizados para e-mail salvo caso de fuerza mayor.

From: "A.J.Millan" <ajmillan@ctv.es>
To: <echo@rediris.es>
Subject: =?iso-8859-1
?B?RXN0YSBsZW5n/GEg8W/xYSBubyBzZSBpcuEgY29uIOlsLiA=?=
Date: Wed, 2 Sep 1998 13:00:57 +0200
MIME-Version: 1.0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 4.72.2106.4
X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2106.4
§3  MIME y e-mail

Como se ha señalado al tratar de los protocolos de transmisión utilizados en el correo electrónico, la porción de mensaje que vemos está completada con una cabecera en la que el sistema incluye información adicional. Reproducimos aquí el cuadro 8.1.1a ( 8.1.1) con algunas de estas "etiquetas" incluidas en cualquier mensaje.

  • MIME-Version: 1.0   indica al programa de correo que se trata de un mensaje en dicho formato (es decir, que se ajusta a lo señalado en la RFC 1521.

  • Content-Type:  Indica que tipo de datos contiene el mensaje.  Pueden encontrarse los siguientes:

    • text/plain = solo texto.

    • image = imágenes estáticas.

    • video = imágenes dinámicas, puede incluir audio.

    • audio = sonido.

    • message.  Significa que el contenido está configurado según el estándar RFC 822; esto puede ser usado para reexpedir mensajes.

    • application se emplea para señalar que el contenido es para ser enviado a un programa externo, por ejemplo texto para una impresora PostScript.

    Un mensaje también puede tener varias partes (multipart) con varios contenidos separados, incluso de tipos diferentes (texto, audio e imágenes). Incluso cada parte puede tener subpartes (ser a su vez multiparte), puesto que el formato MIME puede ser recursivo.

    Content-type puede tener un subtipo, ambos separados por una barra inclinada /.  Por ejemplo, image/gif es una imagen en formato GIF; el tipo es image y el subtipo gif.  Finalmente, puede tener parámetros opcionales empezando por un punto y coma ;.  Por ejemplo, el parámetro charset= en Content-type: text/plain; charset=iso-8859-1, indica que el cuerpo del mensaje utiliza el juego de caracteres ISO-8859-1 (El juego de caracteres por defecto es US-ASCII).

  • Content-transfer-encoding:  Señala como ha sido codificado el mensaje para su transmisión por e-mail, de forma que pueda viajar sin problemas de que sea corrompido desde el destinatario al receptor a través de los agentes de correo (MUAs).  Los tipos que pueden darse para esta etiqueta son los anteriormente definidos (tipos de codificación posibles ) es decir: 7bit, quoted-printable, base64, 8bit y binary.

§2  Bibliografía

Ver "Envío de ficheros a través de Correo Electrónico" por Álvaro Ibañez I World II-4 Abril de 1998 p.46.

Un artículo muy completo, en el que se incluye un recuadro interesante: "Anatomía de un envío MIME por correo electrónico.

  Inicio.


[1]  UUCP  ("Unix to Unix Copy Program").  Protocolo de comunicaciones desarrollado en 1976 en los laboratorios Bell de la AT&T.