此问题涉及浏览器行为以及用于链接,导入,包含或从网页,js文件或css文件中调整CSS,JS,图像和其他文件的协议规范。
在测试静态文件和压缩内容传递时,我发现如果您不再使用约定,很少有浏览器会产生问题。比如:如果你没有为所有内联CSS,JS等文件发送Content-Disposition: inline;
标题,IE6会产生问题,如果你使用文件扩展名{{1,那么一个不太旧版本的safari就无法正确处理gzip压缩文件像.gz
中一样。
我想问一下浏览器关于main-styles.css.gz
响应标头的行为。由于Content-Type
,<link>
和<script>
已经指定了内容类型,是否可以安全地跳过此标题,或者某些浏览器是否出于某种原因需要它?
答案 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
标题。