直接设置 X-Content-Type-Options: nosniff 可阻止浏览器对静态资源执行 MIME 嗅探,关键在于确保该头出现在所有 CSS、JS、图片、字体等静态资源响应中,且值必须严格为 nosniff;其他拼写或大小写错误均无效。

直接设置 X-Content-Type-Options: nosniff 即可阻止浏览器对静态资源执行 MIME 类型嗅探。关键不是“加不加”,而是确保它出现在所有静态资源(如 CSS、JS、图片、字体)的响应头中,且值必须严格为 nosniff —— 其他任何值或拼写错误(如 no-sniff、NOSNIFF)都会被浏览器忽略,等同于未配置。
为什么静态资源特别需要这个头?
浏览器对 script 和 style 标签有明确的 MIME 类型校验逻辑:当请求类型是 script 但响应的 Content-Type 不是合法 JS 类型(如 text/javascript、application/javascript),或请求类型是 style 但响应类型不是 text/css,浏览器就会拒绝执行——但前提是启用了 nosniff。否则,它可能把一个 Content-Type: text/plain 的恶意文件当成 JS 执行。
在常见服务器上统一注入该头
推荐在反向代理或 Web 服务器层全局配置,避免遗漏:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
Nginx:在
server或location块中添加add_header X-Content-Type-Options "nosniff" always;
(always确保 304、404 等非 200 响应也携带) -
Apache:启用
headers模块后,在虚拟主机或.htaccess中写Header set X-Content-Type-Options "nosniff" -
IIS:在
web.config的<system.webServer><httpProtocol><customHeaders>下添加<add name="X-Content-Type-Options" value="nosniff" />
验证是否生效的关键点
不能只看 HTML 页面响应,必须检查实际静态资源的响应头:
- .js、
.css、.png等资源请求 - X-Content-Type-Options: nosniff
常见失效场景与规避方式
即使写了头,也可能因以下原因不生效:
- CDN 缓存了旧响应(未带该头)→ 清除 CDN 缓存或强制刷新缓存规则
- 静态资源通过后端动态生成(如 Spring Boot 的
ResourceHttpRequestHandler)→ 需额外配置拦截器或过滤器注入头 - Nginx 中
add_header在 if 块内使用 → Nginx 不允许,应移至server或location主体 - Tomcat 8 及更早版本未配置 Filter/Valve → 必须手动添加
HeaderSecurityFilter或自定义 Filter

















