每日一报
Content-Type
WHATWG
的 MIME
嗅探标准定义了浏览器在处理资源时应该遵循的具体步骤和算法。这个标准的存在正是为了解决不同浏览器行为不一致的问题。标准规定了以下关键方面:
内容处理的优先级顺序: 首先,规范明确指出浏览器应该按照以下优先级处理内容:
- 检查是否存在
X-Content-Type-Options: nosniff
头部 - 检查
Content-Type
头部的值 - 如果允许嗅探,则根据标准定义的算法进行内容嗅探
- 检查是否存在
不同上下文的嗅探规则: 规范还为不同类型的资源定义了不同的嗅探规则。例如:
js// 伪代码展示规范定义的处理逻辑 function sniffContent(context, content, declaredType) { switch (context) { case 'image': // 图片内容的嗅探规则 return sniffImageContent(content); case 'script': // JavaScript 内容的特殊规则 // 这里的规则特别严格,因为涉及代码执行 return sniffScriptContent(content, declaredType); case 'style': // CSS 内容的规则 return sniffStyleContent(content); } }
安全考虑: 规范特别强调了安全性,定义了一些强制性的安全措施:
- 某些内容类型组合被明确禁止(防止混淆攻击)
- 某些上下文中必须禁用嗅探
X-Content-Type-Options: nosniff
的处理要求