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

时间:2013-12-05 05:43:16

标签: http browser cross-browser

此问题涉及浏览器行为以及用于链接,导入,包含或从网页,js文件或css文件中调整CSS,JS,图像和其他文件的协议规范。

在测试静态文件和压缩内容传递时,我发现如果您不再使用约定,很少有浏览器会产生问题。比如:如果你没有为所有内联CSS,JS等文件发送Content-Disposition: inline;标题,IE6会产生问题,如果你使用文件扩展名{{1,那么一个不太旧版本的safari就无法正确处理gzip压缩文件像.gz中一样。

我想问一下浏览器关于main-styles.css.gz响应标头的行为。由于Content-Type<link><script>已经指定了内容类型,是否可以安全地跳过此标题,或者某些浏览器是否出于某种原因需要它?

3 个答案:

答案 0 :(得分:10)

简而言之,不,这不是必需的。但它是推荐的。 我知道的大多数浏览器都会正确处理<link><script><img>,如果它们没有带头文件,但没有真正的理由不发送标头。基本上,如果没有Content-Type标题,浏览器就会根据内容进行尝试和猜测。

来自RFC2616:

  

Content-Type指定基础数据的媒体类型   内容编码可用于指示任何附加内容
  编码应用于数据,通常用于数据的目的
  压缩,它是所请求资源的属性。有   没有默认编码。

     

包含实体主体的任何HTTP / 1.1消息应该包含一个
  Content-Type标头字段,用于定义该主体的媒体类型。如果
  并且只有当Content-Type字段没有给出媒体类型时,   收件人可以通过检查媒体类型来尝试猜测媒体类型   用于标识
的URI的内容和/或名称扩展名   资源。如果媒体类型仍然未知,则收件人应该是   将其视为“application / octet-stream”类型。

关于关键字SHOULD,在RFC2119中指定:

  

应该:这个词,或形容词“推荐”,意味着有   在特定情况下可能存在有效理由忽略   特定项目,但必须理解全部含义和   在选择不同的课程之前仔细权衡。

答案 1 :(得分:1)

我在java中遇到了一个问题,我尝试通过库chrriis.dj.nativeswing.swtimpl.components.JWebBrowser发布一些数据,它基本上在java程序中显示一个Internet Explorer。但是后端的简单php脚本不会解析我的后期数据。 (使用WebBrowserNavigationParameters在导航到某个页面时设置发布数据)我终于发现必须为php设置Content-Type标头以正确粘贴后期数据。 (默认情况下没有设置。)将其设置为Content-Type:application / x-www-form-urlencoded,一切正常。所以,我想在将数据发布到php时,总是应该设置Content-Type。

答案 2 :(得分:1)

向后兼容性是必需的。

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

IE10 IE9 ,可能其他浏览器总是需要base64 string标题。