UNIVERSIDAD POLITÉCNICA DE PACHUCA EL ESTÁNDAR MIME 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 email. En 1991 la IETF (Internet Engineering Task Force) comenzó a desarrollar esta norma y desde 1994 todas las extensiones MIME están especificadas de forma detallada en diversos documentos oficiales disponibles en Internet. MIME está especificado en seis RFCs (acrónimo inglés de Request For Comments) : RFC 2045, RFC 2046, RFC 2047, RFC 4288, RFC 4289 y RFC 2077. En esencia, el camino seguido para transmitir cualquier fichero es siempre el mismo: transformar (codificar) el fichero no ASCII 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. En sentido general las extensiones de MIME van encaminadas a soportar: • • • • Texto en conjuntos de caracteres distintos de US-ASCII; Adjuntos que no son de tipo texto; Cuerpos de mensajes con múltiples partes (multi-part); Información de encabezados con conjuntos de caracteres distintos de ASCII. Prácticamente todos los mensajes de correo electrónico escritos por personas en Internet y una proporción considerable de estos mensajes generados automáticamente son transmitidos en formato MIME a través de SMTP. Los mensajes de correo electrónico en Internet están tan cercanamente asociados con el SMTP y MIME que usualmente se les llama mensaje SMTP/MIME. 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 MAESTRÍA EN TIC´S MFGP Página 1 UNIVERSIDAD POLITÉCNICA DE PACHUCA 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. 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). 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 líneas deben ser "cortas", de 100 caracteres o menos, terminando con el par de caracteres "Retorno de carro" y "Nueva línea" 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 últimos caracteres son ignorados (lo que permite camuflar líneas MAESTRÍA EN TIC´S MFGP Página 2 UNIVERSIDAD POLITÉCNICA DE PACHUCA muy largas). Las líneas no deben tener más 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 talcual. 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. 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. La importancia de los MIME Types En el uso diario de internet estamos beneficiándonos (y a veces sufriendo) los MIME TYPES. Cada vez que solicitamos una página de internet se abre un diálogo entre nuestro navegador y el server. Nuestro navegador pide la página. El servidor, antes de enviarla, nos confirma que ese recurso existe, y el tipo de datos que contiene. Esto último, mediante referencia al tipo MIME al que corresponde. Este diálogo, oculto al usuario, es parte de las cabeceras HTTP, protocolo que se sigue en la web. Por ejemplo, estas son las cabeceras HTTP mandadas por la página de inicio de ignside.net: HTTP/1.0 200 OK Date: Thu, 24 Jul 2003 21:20:18 GMT Server: Apache/1.3.26 (Unix) Debian GNU/Linux mod_gzip/1.3.19.1a PHP/4.2.3 v2h/1.5.1 X-Powered-By: PHP/4.2.3 Set-Cookie: lang=spanish; expires=Fri, 23-Jul-04 21:20:18 GMT Content-Type: text/html Age: 1 La primera línea especifica que está en uso el protocolo HTTP 1.0, y que la respuesta del servidor a la página solicitada es correcta. Las siguientes líneas se refieren a la identidad del server y a una cookie. A continuación en negrita el MAESTRÍA EN TIC´S MFGP Página 3 UNIVERSIDAD POLITÉCNICA DE PACHUCA server avisa del tipo mime de la página: text/html. Con esta información, el navegador sabe como debe presentar los datos que recibe. En la edición web la indicación de los MIME TYPES puede o debe hacerse en tres lugares diferentes: en el propio servidor, que debe ser capaz de manejar el tipo MIME concreto (e indicar al navegador el tipo de datos que envía); en la propia página web, y en el navegador del usuario • • • El servidor debe estar capacitado para manejar diversos mime types, y estar además habilitado para ello. Por ejemplo en un servidor Apache podemos especificar el tipo MIME por defecto para aquellos archivos que el server no pueda identificar automáticamente como pertenecientes a un tipo concreto: DefaultType text/plain El autor de la página web referencia tipos MIME constantemente: El link a un archivo externo (una hoja de estilo, un script javascript) puede (recomendado) especificar el tipo: <link rel="stylesheet" href="mi_hoja_de_estilo.css" type="text/css"> <script language="JavaScript" type="text/javascript" src="scripts/mijavascript.js"> El tipo MIME puede especificarse como atributo en otras etiquetas HTML, como object o form (atributo enctype). Y por supuesto, con las etiquetas<meta HTTP-EQUIV:... podemos hacer que la página participe en el diálogo server-cliente, especificando datos MIME Por ultimo el navegador del cliente también participa; no solamente ha de estar capacitado para interpretar el concreto MIME type que el server le envía, también puede, en el dialogo previo al envió de datos, informar que MIME types puede aceptar: la cabecera http_accept LISTA DE TIPOS DE MIME En la siguiente liga encontrará una lista de los tipos de MIME. http://www.htmlquick.com/es/reference/mime-types.html MAESTRÍA EN TIC´S MFGP Página 4