É necessário especificar o tipo de conteúdo no cabeçalho da resposta http?

8

Exceto pelo documento html, atualmente todos os arquivos (css, javascript e imagens) servidos no meu servidor da web não especificam content-typeno cabeçalho da resposta http. Por acaso, notei isso, pois pretendo remover o typeatributo em minha scripttag e linktag, mas me deparei com esta resposta que diz o seguinte:

O tipo MIME também é enviado pelo cabeçalho HTTP Content-Type, portanto, usar type = "text / css" seria apenas bytes extras.

Pergunta Overflow
fonte
2
Acredito que você precise especificar o Tipo de Conteúdo para que os scripts sejam executados no IE. Isso evita que usuários mal-intencionados enviem scripts para sites de compartilhamento de imagens.
Brendon
@Brendon, obrigado por apontar as implicações de segurança. Há algum outro aspecto digno de nota, em termos de segurança, assumindo que nenhum usuário enviou conteúdo?
Pergunta Overflow
11
Tem certeza de que seu servidor não está enviando um Content-Typecabeçalho para esses arquivos? Se você estiver vendo a resposta dos arquivos exibidos no cache do navegador , provavelmente não verá um Content-Typecabeçalho.
precisa
A maioria dos servidores envia os tipos MIME corretos por padrão, portanto, a menos que você defina explicitamente o servidor para não enviá-lo, aposto que os arquivos estão sendo enviados com o tipo MIME correto.
usar o seguinte
11
@ w3d, obrigado pelo seu comentário. Depois de verificar novamente, percebo que o que estou lendo é realmente do cabeçalho da solicitação de um 304 not modifiedarquivo. Não é exatamente o cache, mas o tipo de conteúdo é descartado do cabeçalho. Desabilitando o cache, tudo parece normal novamente.
Pergunta Overflow

Respostas:

7

Sim . Pelo protocolo HTTP, cláusula 7.2.1 :

“Qualquer mensagem HTTP / 1.1 que contenha um corpo da entidade DEVE incluir um campo de cabeçalho do tipo de conteúdo que defina o tipo de mídia desse corpo. Se e somente se o tipo de mídia não for fornecido por um campo Tipo de conteúdo, o destinatário PODE tentar adivinhar o tipo de mídia através da inspeção de seu conteúdo e / ou da (s) extensão (s) de nome do URI usada para identificar o recurso. ”

Portanto, sim, os cabeçalhos de resposta devem conter Content-Typecabeçalho para qualquer dado de resposta (chamado "entidade-corpo" no protocolo, geralmente "arquivo" em linguagem comum). Se for omitido, o navegador poderá fazer suas próprias suposições sobre o tipo de dados que obteve. Em muitos contextos, o risco de suposições erradas é insignificante, mas isso não é uma boa desculpa para violar o protocolo.

Atributos como type=text/csse type=text/javascriptnão foram necessários, exceto por algumas especificações formais ou mesmo úteis. Mesmo que um servidor envie incorretamente, por exemplo, dados CSS sem Content-Type, os navegadores tratarão os dados como CSS se <link rel=stylesheet ...>foi o elemento que causou a solicitação. É o relatributo que importa nesse caso.

Jukka K. Korpela
fonte