Este é um cabeçalho de tipo de conteúdo adequado?

4

Eu tenho um bom entendimento do cabeçalho Content-Type na maioria dos casos. Entendo que para os quatro exemplos a seguir, você normalmente seguiria o tipo MIME com charset=your-charset-here .

Content-Type "text/plain; charset=utf-8"
Content-Type "text/html; charset=utf-8"
Content-Type "text/javascript; charset=utf-8"
Content-Type "text/xml; charset=utf-8"

... e com imagens, sem charset:

Content-Type "image/gif"
Content-Type "image/x-icon"
etc.

Mas e esses dois? Eles devem ou não incluir o charset ?

Content-Type "application/x-javascript"
Content-Type "application/xml"

Sei que tudo bem se eles não incluírem o conjunto de caracteres, mas eu gostaria de incluí-lo, se for possível. Eles são apenas arquivos baseados em texto, afinal.

    
por Jeff 14.12.2009 / 00:53

1 resposta

4
Content-Type "text/xml; charset=utf-8"

Isso é redundante. Para XML, a declaração <?xml?> tem precedência sobre o cabeçalho Content-Type. Se a declaração XML for omitida, você terá UTF-8 de qualquer maneira.

Normalmente, deixo o charset fora do XML. Como o XML tem seu próprio mecanismo de codificação de caracteres in-line, o cabeçalho Content-Type é desnecessário e só pode atrapalhar a escolha acidental do tipo errado para arquivos sem encoding especificados que são tratados como UTF-8 em qualquer outro lugar .

A única vez que você faz precisa de um parâmetro charset para XML é quando você está veiculando um conjunto de caracteres não compatível com ASCII, geralmente UTF-16, onde, caso contrário, o analisador não obteria até onde ler <?xml . Mas é bem raro você querer fazer isso. O UTF-16 não é um ótimo armazenamento de arquivos / formato over-the-wire.

Content-Type "application/xml"

O tipo de mídia application/xml é especificado por RFC3023 e um parâmetro charset foi definido explicitamente para isso. Então você pode usar charset se quiser (embora, conforme acima, eu geralmente não queira).

Content-Type "application/x-javascript"

É um tipo não oficial, portanto, não há especificação para dizer se existe um parâmetro charset ou o que ele poderia fazer. Provavelmente, esse tipo deve ser evitado em favor de text/javascript (tradicional) ou application/javascript (definido por RFC4329 ) .

Na prática, definir um charset em seus recursos JavaScript não é necessariamente suficiente, pois o IE o ignora completamente.

Resumo da precedência (maior para menor) dada aos mecanismos de conjunto de caracteres de script:

  • IE: atributo <script charset> , conjunto de caracteres da página principal

  • Opera: charset do arquivo de script, charset da página pai

  • Mozilla, Webkit: conjunto de caracteres do arquivo de script, <script charset> attribute, charset da página pai

por 14.12.2009 / 04:42