Em teoria, de acordo com a RFC 4329 , application/javascript.
O motivo pelo qual deveria ser applicationnão tem nada a ver com o tipo ser legível ou executável. Isso ocorre porque existem mecanismos personalizados de determinação de charset estabelecidos pelo próprio idioma / tipo, e não apenas pelo charsetparâmetro genérico . Um subtipo de textdeve ser capaz de ser transcodificado por um proxy para outro charset, alterando o parâmetro charset. Isso não se aplica ao JavaScript porque:
uma. o RFC diz que os agentes do usuário devem estar analisando o BOM no script para determinar o tipo (não tenho certeza se algum navegador realmente faz isso);
b. os navegadores usam outras informações - a codificação da página de inclusão e, em alguns navegadores, o script charsetatributo - para determinar o conjunto de caracteres. Portanto, qualquer proxy que tentasse transcodificar o recurso quebraria seus usuários. (É claro que, na realidade, ninguém nunca usa proxies de transcodificação, mas essa era a intenção.)
Portanto, os bytes exatos do arquivo devem ser preservados exatamente , o que o torna um applicationtipo binário e não tecnicamente baseado em caracteres text.
Pelo mesmo motivo, application/xmlé oficialmente preferido text/xml: o XML possui seus próprios mecanismos de sinalização de conjunto de caracteres em banda. E todo mundo ignora o applicationXML também.
text/javascripte text/xmlpode não ser a coisa certa oficial, mas há o que todos usam hoje por motivos de compatibilidade, e os motivos pelos quais eles não são a coisa certa estão praticamente falando completamente sem importância.