繁体   English   中英

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

[英]Is Content-Type HTTP header always required?

这个问题是关于浏览器行为以及从html,js或css文件中链接,导入,包含或者调用css,js,image和其他资源的协议规范。

在不同的浏览器中测试静态文件和压缩内容传递时,我发现如果您偏离约定,某些浏览器的行为会有所不同。 例如,如果您不发送Content-Disposition: inline; ,则IE6会产生问题Content-Disposition: inline; 所有内联css和js等文件的标题,如果你在main-styles.css.gz使用文件扩展名.gz则最新版本的safari无法正确处理预压缩的gzip CSS文件。

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

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

来自RFC2616:

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

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

关于RFC2119中指定的关键字SHOULD:

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

我在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。

向后兼容性是必需的。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM