¿Es necesario especificar el tipo de contenido en el encabezado de respuesta http?

8

Excepto por el documento html, actualmente todos los archivos (css, javascript e imágenes) servidos desde mi servidor web no especifican el content-typeen el encabezado de respuesta http. Me doy cuenta de esto ya que tengo la intención de eliminar el typeatributo tanto en mi scriptetiqueta como en mi linketiqueta, pero encontré esta respuesta que dice lo siguiente:

El tipo MIME también se envía a través del encabezado HTTP Content-Type, por lo que usar type = "text / css" solo sería bytes adicionales.

Desbordamiento de preguntas
fuente
2
Creo que debe especificar Content-Type para que los scripts se ejecuten en IE. Esto es para evitar que usuarios malintencionados carguen scripts en sitios web para compartir imágenes.
Brendon
@Brendon, gracias por señalar la implicación de seguridad. ¿Hay algún otro aspecto que valga la pena señalar, en cuanto a seguridad, suponiendo que ningún usuario haya subido contenido?
Desbordamiento de preguntas el
1
¿Está seguro de que su servidor no envía un Content-Typeencabezado para estos archivos? Si está viendo la respuesta de los archivos servidos desde la memoria caché de su navegador, entonces probablemente no verá un Content-Typeencabezado.
MrWhite
La mayoría de los servidores enviarán los tipos mime correctos de manera predeterminada, por lo que, a menos que configure explícitamente su servidor para que no lo envíe, apuesto a que los archivos se envían con el tipo mime correcto.
DisgruntledGoat
1
@ w3d, gracias por tu comentario. Después de volver a comprobar, me doy cuenta de que lo que estoy leyendo es en realidad del encabezado de solicitud de un 304 not modifiedarchivo. No es exactamente el caché, pero el tipo de contenido se elimina del encabezado. Al deshabilitar el caché, todo parece normal nuevamente.
Pregunta Desbordamiento

Respuestas:

7

. Por el protocolo HTTP, cláusula 7.2.1 :

“Cualquier mensaje HTTP / 1.1 que contenga un cuerpo de entidad DEBE incluir un campo de encabezado de tipo de contenido que defina el tipo de medio de ese cuerpo. Si y solo si el tipo de medio no está dado por un campo de Tipo de contenido, el destinatario PUEDE intentar adivinar el tipo de medio mediante la inspección de su contenido y / o las extensiones de nombre del URI utilizado para identificar el recurso ".

Entonces, sí, los encabezados de respuesta deben contener Content-Typeencabezado para cualquier dato de respuesta (llamado "entidad-cuerpo" en el protocolo, a menudo "archivo" en lenguaje común). Si se omite, el navegador puede hacer sus propias suposiciones sobre el tipo de datos que obtuvo. En muchos contextos, el riesgo de conjeturas erróneas es insignificante, pero esta no es una buena excusa para violar el protocolo.

Atributos como type=text/cssy type=text/javascriptno han sido necesarios, excepto por algunas especificaciones formales, o incluso útiles. Incluso si un servidor envía incorrectamente, por ejemplo, datos CSS sin Content-Type, los navegadores tratarán los datos como CSS si <link rel=stylesheet ...>fue el elemento que causó la solicitud. Es el relatributo lo que importa en ese caso.

Jukka K. Korpela
fuente