是否需要在http响应标头中指定content-type?


8

除html文档外,当前从我的Web服务器提供的所有文件(css,javascript和图像)均未content-type在http响应标头中指定。当我打算同时删除标记和标记中的type属性时,我碰巧注意到了这一点,但是遇到了以下答案scriptlink

MIME类型也是通过HTTP Content-Type标头发送的,因此,使用type =“ text / css”只能是多余的字节。


2
我相信您需要为要在IE中执行的脚本指定Content-Type。这是为了防止恶意用户将脚本上传到图像共享网站。
布伦登2013年

@Brendon,感谢您指出安全隐患。在安全方面,假设没有用户上传内容,还有其他方面值得注意吗?
2013年

1
您确定服务器没有发送Content-Type这些文件的标头吗?如果您正在查看来自浏览器缓存的文件的响应,则可能看不到Content-Type标题。
MrWhite 2013年

大多数服务器在默认情况下发送正确的MIME类型,所以除非你明确地设置您的服务器不发送它,我打赌这些文件被以正确的MIME类型发送。
DisgruntledGoat 2013年

1
@ w3d,感谢您的评论。重新检查后,我意识到我正在读取的内容实际上是来自304 not modified文件的请求标头。不完全是高速缓存,而是从标头中删除了内容类型。禁用缓存,一切恢复正常。
问题溢流时间

Answers:


7

是的。通过HTTP协议,第7.2.1节

任何包含实体主体的HTTP / 1.1消息都应包含定义该主体的媒体类型的Content-Type标头字段。当且仅当Content-Type字段未提供媒体类型时,接收方可以通过检查其内容和/或用于标识资源的URI的名称扩展来尝试猜测媒体类型。”

因此,是的,响应头应包含Content-Type任何响应数据的头(在协议中称为“实体”,在通用语言中通常为“文件”)。如果省略,则允许浏览器对其获取的数据类型进行疯狂的猜测。在许多情况下,错误猜测的风险可以忽略不计,但这不是违反协议的好借口。

除了某些正式的规范外,诸如type=text/csstype=text/javascript都没有必要的属性,甚至没有用。即使服务器错误地发送了CSS数据(例如)Content-Type,如果<link rel=stylesheet ...>导致请求的元素,浏览器也会将数据视为CSS 。rel在这种情况下,重要的是属性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.