Inicialmente las páginas web contenían texto y enlaces (hypertext) por lo que inicialmente el protocolo HTTP te permitía enviar únicamente texto. Actualmente HTTP y SMTP nos permite enviar todo tipo de documentos (texto, audio, vídeo, imágenes) de forma transparente a los usuarios gracias a los tipos MIME (Multipurpose Internet Mail Extensions).
Por ello utiliza encabezados que describen el contenido del propio mensaje mediante codificación MIME. Por lo tanto los tipos MIME son unas especificaciones usadas para dar formato a mensajes no ASCII. IANA es el organismo internacional que define los tipos MIME.
Podemos ver los diferentes tipos MIME que existen en el fichero de linux /etc/mimes.types
Ejemplos tipos MIME: text/html, text/css, image/gif, video/mpeg (un documento html, una hoja de estilos y un vídeo en formato mpeg), video/mpeg-2.
El conjunto de cabeceras (MIME headers) que son utilizadas por los protocolos para informar a los clientes y servidores sobre los recursos transmitidos son las siguientes:
MIME-Version. Versión de MIME usada.
MIME-Version: 1.0
Content-Description. Texto que describe el contenido.
Content-Id. Identificador único.
Content-Transfer-Encoding. Cómo se codifican los datos binarios usando ASCII.
Content-transfer-encoding: base64
Content-Type. Tipo y subtipo
Content-Type: text/plain
En HTTP se utilizan las cabeceras y los tipos MIME en los siguientes casos:
- Para informar al navegador del cliente el tipo de datos que está recibiendo del servidor. En función del tipo MIME recibido visualiza o reproduce el recurso, lo abre con una aplicación externa o pregunta al usuario qué hacer.
Se define usando: Content-type dependiendo de si el navegador puede interpretarlo puede: visualizar el documento (por ejemplo text/html), llamar a una aplicación externa (application/pdf al descargar un documento pdf lo leemos con un lector de pdf) o preguntar al usuario que hacer si no sabe con qué abrir su contenido (aplication/abb).
- Para permitir o denegar un contenido: Por ejemplo, Allow: application/doc
- Para encapsular uno o más objetos dentro del cuerpo del mensajes. El más conocido son los tipos multipart (multipart/form-data), que se suelen utilizar junto al método POST para hacer un upload de una imágen al servidor.