Tipos MIME

Busca en una tabla de referencia de extensiones de archivo comunes y sus tipos MIME de IANA, filtrada por categoria de primer nivel, para enviar siempre la cabecera Content-Type correcta.

Que cabecera Content-Type necesita este archivo? Escribe una extension como .webp o parte de un tipo de medio como image para filtrar la tabla. Todas las entradas siguen el registro de tipos de medio de IANA y la lista de tipos comunes de MDN.

Coincidencias
Extension Tipo MIME

Que le dice un tipo MIME al navegador

Anatomia de un tipo de medio

Un tipo MIME - llamado propiamente tipo de medio - es la etiqueta que un servidor adjunta a una respuesta para que el cliente sepa como tratar los bytes que vienen despues. Tiene dos partes separadas por una barra: un tipo de primer nivel como text, image, audio, video, font, model o application, y un subtipo que nombra el formato concreto. image/png y application/json son tipos de medio completos; image por si solo no lo es.

Los subtipos tienen sus propias convenciones. Un x- inicial marcaba antano un tipo experimental, como en application/x-tar, y aunque la practica esta obsoleta los nombres supervivientes estan demasiado extendidos para cambiarlos. Un sufijo final +algo indica que el formato se construye sobre una sintaxis mas general: image/svg+xml es XML, application/ld+json es JSON, y un analizador puede recurrir a la sintaxis base cuando no reconoce el formato especifico.

Algunos tipos admiten parametros tras un punto y coma. El mas importante es charset, como en text/html; charset=utf-8. Omitirlo en una respuesta de texto invita al navegador a adivinar la codificacion, que es una fuente clasica de mojibake, asi que declarar UTF-8 de forma explicita siempre compensa los caracteres extra.

Por que la cabecera importa mas que la extension

Los navegadores deciden que hacer con una respuesta segun la cabecera Content-Type, no segun el nombre de archivo de la URL. Servir un PNG como text/plain muestra un muro de basura binaria; servir JSON como text/html puede hacer que un cliente fetch lo rechace. Acertar con la cabecera es lo que hace que una descarga se abra en la aplicacion correcta y que un recurso incrustado se muestre en lugar de descargarse.

El desajuste tiene ademas consecuencias de seguridad. Los navegadores antiguos practicaban el MIME sniffing: inspeccionaban los primeros bytes de una respuesta y anulaban la cabecera que consideraban erronea. Un atacante capaz de subir un archivo con aspecto de HTML podia lograr que se ejecutara en el origen del sitio aunque el servidor lo etiquetara como imagen. La cabecera X-Content-Type-Options: nosniff desactiva ese comportamiento y hoy es practica estandar en cualquier endpoint que sirva contenido subido por usuarios.

Para las descargas, combina el tipo de medio con Content-Disposition: attachment; filename="informe.pdf". El tipo de medio describe que son los bytes y la disposicion describe que debe hacer el navegador con ellos: responden a preguntas distintas.

Donde vive realmente el mapeo

No existe una unica tabla autoritativa de extension a tipo, cosa que sorprende a mucha gente. IANA registra los tipos de medio en si, pero el mapeo de una extension de archivo a un tipo es una convencion local que mantiene cada servidor. Apache lee mime.types, nginx tiene su propio archivo mime.types y los frameworks de aplicacion incluyen sus propias tablas. Por eso el mismo archivo .wasm puede servirse correctamente desde un servidor y como application/octet-stream desde otro que no se ha actualizado.

application/octet-stream es el valor generico de reserva que significa "datos binarios arbitrarios". Es la respuesta honesta cuando el formato es genuinamente desconocido, pero impide el renderizado incrustado, asi que conviene anadir un mapeo explicito para cualquier formato que tu sitio sirva con regularidad. Los formatos mas nuevos como AVIF, JXL y WebAssembly son los que faltan con mas frecuencia en una configuracion de servidor antigua.

Nota de codigo abierto: implementado en JavaScript puro sin librerias de terceros.

Preguntas frecuentes

Por que mi archivo se descarga en vez de mostrarse?
O el tipo de medio es `application/octet-stream` o la respuesta lleva `Content-Disposition: attachment`. Pon el tipo correcto y quita la disposicion de adjunto para que se muestre incrustado.
Cual es el tipo MIME de JSON?
`application/json`. Codigo antiguo usaba a veces `text/json` o `application/x-json`, pero ninguno esta registrado y algunos clientes los rechazan.
JavaScript debe ser text/javascript o application/javascript?
`text/javascript` es la forma recomendada actualmente. Ambas funcionan en todos los navegadores, pero la especificacion HTML se decanto por la variante text y marca la de application como obsoleta.
Necesito incluir charset?
Para los tipos textuales, si. Sin el, el navegador adivina, lo que produce mojibake en contenido no ASCII. Envia `text/html; charset=utf-8` o el equivalente para tu tipo.
Que significa el sufijo +xml o +json?
Que el formato se construye sobre una sintaxis mas general. Un cliente que no conozca `application/ld+json` en concreto aun puede analizarlo como JSON, lo que hace posible el utillaje generico.
Por que mi servidor envia el tipo incorrecto para .webp o .avif?
La extension falta en el archivo `mime.types` de ese servidor. Anade un mapeo explicito en la configuracion; el archivo en si esta bien y no necesita cambios.