Los tipos MIME incorrectos causan algunos de los problemas más desconcertantes del trabajo web: una página muestra texto sin procesar, una fuente no carga, una descarga tiene el nombre equivocado. Arreglarlos es sobre todo cuestión de configuración.
Síntoma: el navegador descarga en lugar de mostrar
Probablemente el servidor envía application/octet-stream o un tipo erróneo. Establece el tipo correcto para la extensión, como application/pdf para PDF o image/webp para imágenes WebP, y comprueba que ningún proxy lo sobrescriba.
Síntoma: se rechaza un script u hoja de estilos
La consola puede decir que un script se bloqueó por una discrepancia de tipo MIME. Los módulos necesitan un tipo de JavaScript, y con nosniff activado el navegador no adivina. Asegúrate de que el servidor asigne bien .js, .mjs y .css. Una causa habitual es que se sirva una página de error (text/html) para un archivo inexistente, que el navegador se niega a ejecutar como script.
Síntoma: fallan fuentes o WebAssembly
Los tipos de archivo más nuevos como .woff2, .wasm y .webmanifest pueden faltar en una configuración antigua del servidor. Añádelos: font/woff2, application/wasm, application/manifest+json.
Dónde configurarlo
Los alojamientos estáticos y los servidores web tienen una tabla de tipos MIME o un archivo de cabeceras. Los frameworks de aplicaciones suelen fijar la cabecera al devolver una respuesta, así que establécela de forma explícita para descargas y APIs.
Validar las subidas
El tipo que informa un navegador para un archivo subido viene del cliente, así que un atacante puede cambiarlo. Una validación más segura:
- Comprueba la extensión con una lista de permitidos.
- Inspecciona los primeros bytes del archivo, llamados números mágicos, para confirmar el formato real. Un PNG empieza con
89 50 4E 47y un PDF con%PDF. - Recodifica las imágenes en el servidor, lo que elimina cargas ocultas.
- Guarda las subidas fuera de la raíz web o con un tipo seguro, y sirve con
Content-Disposition: attachmentcuando no deban ejecutarse. - Limita el tamaño del archivo.
Preguntas frecuentes
¿Puedo fiarme del atributo accept? Solo ayuda a los usuarios a elegir archivos. No es un control de seguridad.
¿Por qué recibo text/plain para un archivo JSON? El servidor asigna por extensión, y puede no conocer .json o estar configurado con un valor por defecto.

