Tipos MIME más comunes
Los servidores y los formularios de subida dependen de estas cadenas; un tipo incorrecto puede romper previsualizaciones, descargas o la CSP.
| Tipo | Tipo MIME | Extensión típica |
|---|---|---|
| HTML | text/html | .html |
| CSS | text/css | .css |
| JavaScript | text/javascript | .js |
| JSON | application/json | .json |
| XML | application/xml | .xml |
| Texto sin formato | text/plain | .txt |
| CSV | text/csv | .csv |
| application/pdf | ||
| ZIP | application/zip | .zip |
| PNG | image/png | .png |
| JPEG | image/jpeg | .jpg |
| GIF | image/gif | .gif |
| WebP | image/webp | .webp |
| SVG | image/svg+xml | .svg |
| ICO | image/x-icon | .ico |
| MP3 | audio/mpeg | .mp3 |
| WAV | audio/wav | .wav |
| MP4 | video/mp4 | .mp4 |
| WebM | video/webm | .webm |
| WOFF2 | font/woff2 | .woff2 |
| Formulario URL-encoded | application/x-www-form-urlencoded | — |
| Formulario multipart | multipart/form-data | — |
Notas
- Algunos navegadores sniffan el contenido; aun así, tu servidor debe enviar el tipo correcto.
- El tipo oficial de JS es text/javascript (application/javascript está obsoleto).
Qué controla realmente el tipo MIME
Un tipo MIME es la etiqueta que un servidor adjunta a una respuesta para indicar al navegador qué representan los bytes. text/html procesa una página, application/pdf abre un visor, image/svg+xml puede dibujarse en línea, y application/octet-stream activa una solicitud de descarga. Dos archivos idénticos pueden comportarse de manera completamente diferente según este encabezado. Los navegadores, los formularios de carga, los clientes de correo electrónico y las reglas de seguridad del contenido lo leen, por lo que establecerlo incorrectamente es una causa frecuente de vistas previas rotas, descargas forzadas y scripts bloqueados.
Dónde se aplican text/ y application/ en la actualidad
El consejo antiguo indicaba que JavaScript era application/javascript; el estándar actual es text/javascript y application/javascript está obsoleto. CSS es text/css, HTML es text/html, texto sin formato es text/plain y CSV es text/csv: todos son text/* porque se diseñaron para ser legibles por humanos. Los formatos estructurados son application/*: application/json, application/xml, application/pdf, application/zip. La excepción notable es SVG, que es XML pero debe servirse como image/svg+xml para que los navegadores lo rendericen en lugar de descargarlo.
Los tipos incorrectos rompen las cargas y la seguridad
Una carga mal etiquetada es una fuente clásica de errores: un archivo JSON servido como text/plain puede ser rechazado por un cliente de API, una imagen devuelta como octet-stream se descarga en lugar de mostrarse, y un script servido como text/html es bloqueado por el navegador. Las normas estrictas de Content-Security-Policy se basan en el tipo MIME, por lo que una hoja de estilos servida con el tipo equivocado puede ser rechazada directamente. Cuando una vista previa o una descarga se comporta de forma extraña, comprobar el Content-Type de la respuesta suele ser el diagnóstico más rápido.
Charset y detección automática de contenido
Para los tipos de texto, combina el tipo MIME con un juego de caracteres — text/html; charset=utf-8 y application/json; charset=utf-8 son los valores seguros por defecto para cualquier contenido multilingüe. Los navegadores más antiguos utilizaban la detección automática de contenido para adivinar un tipo a partir de los bytes del archivo, lo que los atacantes explotaban; enviar X-Content-Type-Options: nosniff indica a los navegadores que confíen en el tipo declarado en lugar de adivinarlo. Envía siempre un Content-Type explícito y correcto en lugar de confiar en la extensión del archivo, que el navegador nunca ve.
Establecer tipos en el servidor y en los formularios
De dónde proviene el tipo importa. Los servidores estáticos asignan extensiones automáticamente, pero los frameworks web a menudo necesitan que se establezca explícitamente — en Express con res.type('json'), en Nginx mediante el bloque types, y en Cloudflare Pages a través de encabezados o de la extensión del archivo. Los formularios HTML usan enctype para controlar la codificación de la carga: multipart/form-data para archivos y application/x-www-form-urlencoded para campos simples, mientras que una API que espera JSON envía application/json. Enviar el incorrecto es una fuente silenciosa de respuestas 415 Unsupported Media Type y 400 que parecen misteriosas hasta que inspeccionas el encabezado de la petición.
Otras familias que vale la pena reconocer
Más allá de los formatos web cotidianos, hay varias familias que conviene reconocer. Las fuentes usan font/woff2 y font/ttf. Las imágenes se dividen por formato — image/jpeg, image/png, image/webp, image/avif, image/gif — mientras que el audio y el vídeo usan audio/mpeg, audio/ogg, video/mp4 y video/webm. Los archivos comprimidos y los bloques binarios son application/zip, application/gzip y application/octet-stream. Cuando una API devuelve un archivo que no puede identificar, octet-stream es la respuesta honesta: obliga al cliente a descargarlo en lugar de adivinar, que es exactamente el comportamiento que deseas cuando el contenido es desconocido.
Preguntas frecuentes
- ¿Qué tipo MIME debo usar para un archivo .json?
- Usa application/json para archivos JSON y respuestas de API. Es el tipo estándar y conviene servirlo en UTF-8.
- ¿Cuál es el tipo MIME de los archivos .js?
- El tipo oficial de JavaScript es text/javascript. El antiguo application/javascript está obsoleto y no debe usarse.
- ¿Qué tipo MIME usa una imagen SVG?
- Los archivos SVG usan image/svg+xml. Si no se sirven con ese tipo, los navegadores no los muestran en línea.