É 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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.