Tipos MIME comuns

Servidores e formulários de upload dependem dessas strings; um tipo errado pode quebrar pré-visualizações, downloads ou a CSP.

Atualizado:

TipoTipo MIMEExtensão típica
HTMLtext/html.html
CSStext/css.css
JavaScripttext/javascript.js
JSONapplication/json.json
XMLapplication/xml.xml
Texto simplestext/plain.txt
CSVtext/csv.csv
PDFapplication/pdf.pdf
ZIPapplication/zip.zip
PNGimage/png.png
JPEGimage/jpeg.jpg
GIFimage/gif.gif
WebPimage/webp.webp
SVGimage/svg+xml.svg
ICOimage/x-icon.ico
MP3audio/mpeg.mp3
WAVaudio/wav.wav
MP4video/mp4.mp4
WebMvideo/webm.webm
WOFF2font/woff2.woff2
Formulário URL-encodedapplication/x-www-form-urlencoded—
Formulário multipartmultipart/form-data—

Notas

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.

Fontes