Tipos MIME comuns
Servidores e formulários de upload dependem dessas strings; um tipo errado pode quebrar pré-visualizações, downloads ou a CSP.
| Tipo | Tipo MIME | Extensão típica |
|---|---|---|
| HTML | text/html | .html |
| CSS | text/css | .css |
| JavaScript | text/javascript | .js |
| JSON | application/json | .json |
| XML | application/xml | .xml |
| Texto simples | 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 |
| Formulário URL-encoded | application/x-www-form-urlencoded | — |
| Formulário multipart | multipart/form-data | — |
Notas
- Alguns navegadores inspecionam o conteúdo; ainda assim, envie o tipo correto do servidor.
- O tipo oficial de JS é text/javascript (application/javascript está obsoleto).
O que o tipo MIME realmente controla
Um tipo MIME é o rótulo que um servidor anexa a uma resposta indicando ao navegador o que são os bytes. text/html exibe uma página, application/pdf abre um leitor, image/svg+xml pode ser exibido inline, e application/octet-stream ativa um prompt de download. Dois arquivos que parecem idênticos podem se comportar de forma completamente diferente com base apenas nesse cabeçalho. Navegadores, formulários de upload, clientes de e-mail e regras de segurança de conteúdo o leem, então erro nele é uma causa comum de pré-visualizações quebradas, downloads forçados e scripts bloqueados.
Onde text/ e application/ se aplicam hoje
Conselhos mais antigos diziam que JavaScript era application/javascript; o padrão atual é text/javascript e application/javascript está obsoleto. CSS é text/css, HTML é text/html, texto puro é text/plain e CSV é text/csv — todos text/* porque foram projetados para serem legíveis por humanos. Formatoss estruturados são application/*: application/json, application/xml, application/pdf, application/zip. A exceção notável é SVG, que é XML mas deve ser servido como image/svg+xml para que navegadores o renderizem em vez de baixá-lo.
Tipos incorretos quebram uploads e segurança
Um upload com rótulo incorreto é uma fonte clássica de bugs: um arquivo JSON servido como text/plain pode ser recusado por um cliente de API, uma imagem retornada como octet-stream faz download em vez de exibir, e um script servido como text/html é bloqueado pelo navegador. Regras estritas de Content-Security-Policy dependem do tipo MIME, então uma folha de estilo servida com o tipo errado pode ser recusada de imediato. Quando uma pré-visualização ou download se comporta de forma estranha, verificar o Content-Type da resposta costuma ser o diagnóstico mais rápido.
Charset e detecção de conteúdo
Para tipos de texto, associe o tipo MIME a um charset — text/html; charset=utf-8 e application/json; charset=utf-8 são os padrões seguros para qualquer conteúdo multilíngue. Navegadores mais antigos usavam detecção de conteúdo para adivinhar um tipo a partir dos bytes do arquivo, o que atacantes exploravam; enviar X-Content-Type-Options: nosniff diz aos navegadores para confiar no tipo declarado em vez disso. Sempre envie um Content-Type explícito e correto em vez de depender da extensão do arquivo, que o navegador nunca vê.
Definindo tipos no servidor e em formulários
De onde o tipo vem importa. Hospedagens estáticas mapeiam extensões automaticamente, mas frameworks web frequentemente precisam defini-lo explicitamente — no Express com res.type('json'), no Nginx através do bloco types, e no Cloudflare Pages via headers ou a extensão do arquivo. Formulários HTML usam enctype para controlar a codificação de upload: multipart/form-data para arquivos e application/x-www-form-urlencoded para campos simples, enquanto uma API que espera JSON envia application/json. Enviar o errado é uma fonte silenciosa de respostas 415 Unsupported Media Type e 400 que parecem misteriosas até você inspecionar o header da requisição.
Outras famílias que valem a pena reconhecer
Além dos formatos web cotidianos, algumas famílias valem a pena reconhecer. Fontes usam font/woff2 e font/ttf. Imagens se dividem por formato — image/jpeg, image/png, image/webp, image/avif, image/gif — enquanto áudio e vídeo usam audio/mpeg, audio/ogg, video/mp4 e video/webm. Arquivos compactados e blobs binários são application/zip, application/gzip e application/octet-stream. Quando uma API retorna um arquivo que não consegue identificar, octet-stream é a resposta honesta: ela força o cliente a fazer download em vez de adivinhar, que é exatamente o comportamento que você quer quando o conteúdo é desconhecido.
Perguntas frequentes
- Qual tipo MIME devo usar para um arquivo .json?
- Use application/json para arquivos JSON e respostas de API. É o tipo padrão e deve ser servido em UTF-8 quando possível.
- Qual é o tipo MIME de arquivos .js?
- O tipo oficial de JavaScript é text/javascript. O antigo application/javascript está obsoleto e não deve mais ser usado.
- Qual é o tipo MIME de uma imagem SVG?
- Arquivos SVG usam image/svg+xml. Sem esse tipo, os navegadores não renderizam o SVG inline.