应配置 add_header x-content-type-options "nosniff" always; 在 http 或 server 块中,并确保静态资源 content-type 正确,否则 nosniff 仅阻止执行而无法修复类型错误。

直接在 Nginx 配置中添加 X-Content-Type-Options: nosniff 响应头,就能有效阻止浏览器对静态资源做 MIME 类型嗅探。重点不是“加不加”,而是确保它稳定、准确地出现在所有关键静态资源的响应里。
必须用 "nosniff",大小写敏感,不能拼错
这个值是唯一被浏览器识别的有效值。no-sniff、NOSNIFF、nosniff(末尾空格)、"nosniff"(带英文引号)等写法都会被忽略,等于没配。
推荐加 always 参数,覆盖所有状态码
Nginx 默认只对 2xx 成功响应添加 add_header,而 302 重定向、404 错误页等响应可能漏掉该头。加上 always 可确保无论返回什么状态码,头都生效:
add_header X-Content-Type-Options "nosniff" always;
建议放在 http 或 server 块,而非 location 块
虽然有人在 location ~ \.(js|css|png|woff2)$ 里加,但容易遗漏字体、SVG、JSON 等新型资源。统一放在 http 或 server 块更稳妥,且不影响性能:
http {
add_header X-Content-Type-Options "nosniff" always;
# 其他安全头...
}
配合正确的 Content-Type 才真正起效nosniff 不会修复错误类型,只会强制浏览器拒绝执行不匹配的内容。例如:
- JS 文件返回
Content-Type: text/plain→ 加了nosniff后,浏览器直接报错:“Refused to execute script... MIME type ('text/plain') is not executable”
所以务必同步检查: -
.js文件是否返回application/javascript或text/javascript -
.css是否返回text/css -
.woff2是否返回font/woff2 - SVG 图片是否返回
image/svg+xml(而非text/plain或application/octet-stream)
不复杂但容易忽略











