Também disponível em: English · Español · Français · العربية
Tipos MIME
Os tipos de media que lhe podem mesmo servir, com os registados assinalados e as divergências dirimidas.
O que é um tipo MIME
Um tipo MIME — a norma já lhe chama tipo de media — é a etiqueta que um servidor cola a um ficheiro para que o navegador saiba o que ele é. Viaja no cabeçalho Content-Type, tem a forma text/html ou image/png, e é o que decide se o seu navegador desenha uma página, mostra uma imagem ou lhe oferece uma transferência. Se estiver errado, um ficheiro perfeitamente bom chega como algaraviada ou como uma transferência inesperada.
A lista com autoridade é o registo de tipos de media da IANA, que contém 2 318 repartidos por nove árvores de primeiro nível. Esta página é construída a partir desse registo, do mime.types do Apache httpd e do do nginx, os três descarregados e não recordados.
E deliberadamente não é um despejo do registo, por um motivo que convém conhecer antes de o ir consultar por sua conta.
Como usar esta lista
- Pesquise por extensão ou por tipo. Uma extensão corresponde de forma exacta, com ponto ou sem ele, portanto webp e .webp funcionam igual. Tudo o resto é procurado dentro do tipo: image/ dá-lhe a árvore das imagens e +xml os tipos com sufixo estruturado.
- Veja a etiqueta antes de confiar num tipo. Registado significa que consta do registo da IANA, e a referência ao lado é o RFC ou a organização que o lá pôs. Os restantes são tipos que um servidor web lhe enviará sem pestanejar e que registo nenhum alguma vez viu.
- Leia a tabela de divergências se o seu ficheiro for dos complicados. Treze extensões recebem respostas diferentes do Apache e do nginx, e a tabela diz a que lado o registo dá razão em cada caso.
O registo não consegue responder à pergunta com que chega
Quase toda a gente chega a uma lista de tipos MIME com a mesma dúvida: que Content-Type envio para um ficheiro .webp? O registo da IANA não lho pode dizer. As suas colunas são Nome, Modelo e Referência: não há coluna nenhuma de extensões, porque que extensão corresponde a que tipo não é coisa que a IANA registe. Pode procurar image/webp e confirmar que existe; o que não pode é procurar .webp.
E não há mais nada que preencha a lacuna. A norma de MIME Sniffing do WHATWG, que é a que os navegadores realmente implementam, diz sem rodeios que as extensões não são usadas para determinar o tipo de um recurso obtido por HTTP porque não são fiáveis e se falsificam com facilidade, e não publica tabela de extensões nenhuma. A correspondência simplesmente não está normalizada em lado algum.
O que decide na prática é o servidor web que tiver à frente dos ficheiros. Por isso esta lista usa uma regra declarada em vez de uma selecção à mão: contém todo o tipo de media a que o Apache httpd ou o nginx associam pelo menos uma extensão, 790 ao todo, que é o conjunto que lhe podem mesmo servir. O total do registo é impresso ao lado para que ninguém confunda a parte com o todo.
Dois servidores, 91 extensões partilhadas, 13 divergências
O Apache associa 998 extensões e o nginx 110. Noventa e uma aparecem em ambos, e em treze delas — 14,3 % — cada um dá uma resposta diferente. Não são formatos raros: entre elas estão .js e .xml, dois dos tipos de ficheiro mais servidos da web.
Uma mera contagem de divergências não valeria nada, portanto nesta página cada conflito é dirimido contra o registo. Três ganha-os o Apache sem discussão: em .bmp, .m4a e .pdb o Apache dá um tipo registado e o nginx um que não está. Seis são o nginx a recorrer a application/octet-stream, que está registado e é tecnicamente correcto e não diz nada ao navegador: é o que faz .exe, .iso e .deb transferirem em vez de se portarem mal. Em dois não há tipo registado de nenhum dos lados.
Os dois restantes são os interessantes, e são-no em direcções opostas. Em .xml tanto application/xml como text/xml estão registados, e o RFC 7303 regista os dois de propósito: nenhum servidor está errado e não há resposta a encontrar. Em .js também estão os dois registados, mas a entrada de application/javascript cita o RFC 9239, o documento que fez de text/javascript a forma padrão e deixou as outras obsoletas. O Apache está actualizado; o nginx ficou para trás. Mesmo sintoma à superfície, explicação completamente diferente, e só a leitura das referências os distingue.
Um terço do que lhe podem servir não está no registo
Dos 790 tipos de media que estes servidores associam a extensões, 547 estão no registo da IANA e 243 não. Isso é perto de um terço de tudo o que uma instalação por omissão entrega a um navegador, com um Content-Type que organismo de normalização nenhum alguma vez registou. A maioria são os restos com prefixo x- de formatos que nunca chegaram a ser registados, e funcionam bem na prática precisamente porque ninguém verifica.
Sete vão ainda mais longe e usam uma árvore de primeiro nível que não existe. A IANA regista nove — application, audio, font, image, message, model, multipart, text e video — e o Apache inclui seis tipos chemical/* para formatos de ficheiros moleculares e um sob x-conference. Um servidor web acabado de instalar vai servir-lhe um Content-Type cujo primeiro componente nem sequer é uma árvore registada.
Nada disto é um escândalo: é como acaba por funcionar uma convenção de trinta anos sem mecanismo de fiscalização. Mas convém sabê-lo antes de dar por adquirido que um tipo que aparece num ficheiro de configuração é norma.
Limites honestos
Isto é um instantâneo de três documentos que se mexem, e a data em que foi construído está impressa em baixo. O registo ganha entradas com regularidade e os dois servidores actualizam as suas correspondências; o script que monta tudo está no repositório, portanto a página pode dizer quando foi verdadeira.
Dois servidores também não são todos os servidores. O IIS, o Caddy, as frameworks de Node, as CDN e a biblioteca padrão de cada linguagem levam a sua própria tabela, e também não coincidirão com estas duas em todos os casos. Escolheram-se o Apache e o nginx por serem os dois que servem a maior parte da web, não por serem as únicas opiniões existentes.
E o limite de fundo é o que a norma de sniffing avisa: o tipo que um servidor declara não é prova do que um ficheiro contém. Qualquer um pode carregar um ficheiro chamado foto.png cheio de HTML, e é exactamente por isso que os navegadores farejam o conteúdo e por isso que nunca deve confiar num cabeçalho Content-Type para uma decisão de segurança.
Porque é grátis?
Porque é uma lista de factos públicos montada a partir de três fontes públicas. A página é texto estático com uma caixa de pesquisa que a filtra no seu navegador: nada é enviado, nada é guardado e não há servidor pelo meio para a ler.
Portanto não há conta, nem registo, nem nada reservado. O registo é um documento público, os dois ficheiros mime.types são código aberto, e o script que os transforma nesta página está no repositório ao lado dela.