Tipos MIME
Las extensiones multipropósito de correo de Internet, conocidas como tipo MIME, son una especificación que amplía el formato del correo electrónico y es utilizada por los navegadores y servidores para identificar el tipo de contenido que se está transfiriendo. La especificación está estandarizada en el IETF RFC 6838. Un tipo MIME es una cadena de identificador, no una extensión de archivo. Los navegadores generalmente utilizan el tipo MIME (y no la extensión del archivo) para determinar cómo procesar un documento; por eso es importante configurar correctamente los servidores para adjuntar el tipo MIME adecuado al encabezado de respuesta. Si no se configura correctamente, los navegadores pueden interpretar mal el contenido de los archivos y los sitios no funcionarán correctamente. Los archivos descargados también pueden manejarse incorrectamente.
Sintaxis
Tipos MIME
Type/SubtypeLa estructura de un tipo MIME consta de un tipo y un subtipo, separados por una barra (/), sin espacios. Los tipos MIME no distinguen entre mayúsculas y minúsculas, pero comúnmente se escriben en minúsculas.
Un tipo MIME debe tener siempre tanto un tipo como un subtipo. Cada tipo tiene su conjunto de subtipos posibles.
Para proporcionar detalles adicionales, puedes usar un parámetro opcional.
Tipos MIME
type/subtype;parameter=valueLos tipos MIME se dividen en dos categorías: discretos y multiparte. Cada uno tiene subtipos específicos.
Tipos Discretos
Tipos MIME
text/plain
text/html
image/jpeg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream
…Los tipos discretos indican la categoría del documento. Pueden ser uno de los siguientes:
| Tipo | Descripción | Ejemplo de subtipos típicos |
|---|---|---|
| application | Contiene datos binarios | application/javascript, application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml, application/pdf |
| audio | Archivo de audio | audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav |
| font | Datos de fuente/tipo de letra | font/woff, font/ttf y font/otf |
| model | Datos de modelo para objetos 3D | model/3mf, model/vrml |
| text | Documento de texto | text/plain, text/html, text/css, text/javascript |
| video | Archivo de video | video/webm, video/ogg |
Para describir un documento de texto que no pertenece a un subtipo en particular, se utiliza text/plain. Los documentos que contienen datos binarios sin un subtipo específico se describen mediante application/octet-stream.
Tipos Multiparte
Tipos MIME
multipart/form-data
multipart/byterangesLos tipos multiparte indican documentos que constan de varias partes, cada una de las cuales puede tener un tipo MIME diferente.
| Tipo | Descripción | Ejemplo de subtipos típicos |
|---|---|---|
| message | Mensaje que cubre otros mensajes | message/rfc822, message/partial |
| multipart | Datos compuestos por múltiples componentes | multipart/form-data, multipart/byteranges |
Tipos MIME Comunes
La siguiente tabla enumera los tipos MIME modernos y más utilizados. Muchos tipos heredados con el prefijo x- (por ejemplo, image/x-icon) están obsoletos y deben evitarse en nuevos proyectos. Para una lista completa y oficial, consulta el registro de tipos de medios de IANA.
| Extensión de archivo | Tipo de medio |
|---|---|
.html, .htm | text/html |
.css | text/css |
.js | application/javascript |
.json | application/json |
.png | image/png |
.jpg, .jpeg | image/jpeg |
.gif | image/gif |
.svg | image/svg+xml |
.mp3 | audio/mpeg |
.mp4 | video/mp4 |
.pdf | application/pdf |
.zip | application/zip |
Configuración de encabezados Content-Type
Los servidores deben enviar el encabezado Content-Type correcto para que los navegadores sepan cómo manejar la respuesta. A continuación, se muestran ejemplos rápidos para entornos comunes:
Nginx
location /api/data {
default_type application/json;
add_header Content-Type application/json;
}Apache (.htaccess)
AddType application/json .json
AddType text/css .cssNode.js (Express)
app.get('/api/status', (req, res) => {
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({ status: 'ok' }));
});Práctica
¿Qué son los tipos MIME y cuál es su función?