Content-Type HTTP头是否始终需要?

24

这个问题涉及浏览器行为以及协议规范,用于从html、js或css文件中链接、导入、包含或ajax css、js、图片和其他资源。

在测试不同浏览器的静态文件和压缩内容交付时,我发现一些浏览器开始表现出不同的行为,如果你偏离惯例。例如,如果你不为所有内联css和js等文件发送Content-Disposition:inline;头,则IE6会出问题,而最近版本的Safari如果使用文件扩展名.gz(如main-styles.css.gz)来处理预压缩gzip CSS文件,则无法正确处理。

我的问题是关于浏览器对Content-Type响应头的行为。由于<link><script><img>标签已经合理地指定了资源的内容类型,是否可以安全地跳过该头部信息,或者某些浏览器出于历史原因需要它?

3个回答

19
简而言之,不是必需的,但建议使用。大多数我所知道的浏览器如果没有发送头部,将正确处理<link><script><img>,但实际上没有理由不发送头部。换句话说,如果没有 Content-Type头部,浏览器只能根据内容来猜测。
从RFC2616中可以看出:
内容类型指定底层数据的媒体类型。 Content-Encoding可用于指示应用于数据的任何其他内容编码,通常用于数据压缩的目的,这些内容编码是所请求资源的属性。 不存在默认编码。
任何包含实体主体的HTTP / 1.1消息都应包括一个Content-Type头字段,定义该主体的媒体类型。仅当媒体类型未通过Content-Type字段给出时,接收方可以尝试通过检查其内容和/或用于标识资源的URI的名称扩展名来猜测媒体类型。如果媒体类型仍然未知,则接收方应将其视为“application/octet-stream”类型。
关于RFC2119中规定的SHOULD关键字:
SHOULD:此单词或形容词“推荐”表示,在特定情况下可能存在有效原因可以忽略特定项,但在选择不同的课程之前必须理解并仔细权衡全部影响。

2

这是为了向后兼容性而要求的。

例如:Internet Explorer 10需要Content-Type:image/svg+xml才能呈现任何svg文件。

IE10IE9和可能其他浏览器总是需要Content-Type头。


1

我在Java中遇到了一个问题,我尝试通过库chrriis.dj.nativeswing.swtimpl.components.JWebBrowser发布一些数据,该库基本上显示了Java程序内部的Internet Explorer。但是简单的PHP脚本后端无法解析我的POST数据。(使用WebBrowserNavigationParameters将数据设置为POST数据,同时导航到特定页面)最后我发现必须设置Content-Type标头才能使PHP正确地粘贴POST数据(默认情况下没有设置)。将它设置为Content-Type:application/x-www-form-urlencoded,一切都正常工作。因此,我想在向PHP发送POST数据时始终应该设置Content-Type。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接