Web应用安全:需为哪些Content-Type设置安全HTTP响应头?
针对不同资源的安全HTTP响应头配置建议
你的思路非常合理——很多安全头确实只需要针对HTML文档设置,没必要在静态资源上浪费带宽或增加复杂度。咱们逐个拆解你列出的这些头,验证你的分类是否准确,再补充一些实用细节:
逐个头的配置分析
1. Content-Security-Policy (CSP)
- 正确配置对象:仅
text/html和application/xhtml+xml - 原因:CSP是用来约束HTML页面内的脚本、样式、媒体资源加载行为的,静态资源(图片、字体、CSS等)本身不需要这个规则,浏览器也不会对非HTML资源解析CSP头,完全没必要额外添加。
2. Referrer-Policy
- 正确配置对象:所有Content-Type
- 原因:和你想的一样,CSS加载字体/图片时、图片被第三方网站嵌入时,都会遵循这个策略控制Referrer字段的发送行为。而且这个头内容通常很短,全局配置给所有资源也不会有性能负担。
3. Strict-Transport-Security (HSTS)
- 灵活配置对象:优先给
text/html,也可全局配置所有资源 - 原因:HSTS是作用于整个域名的——浏览器只要在任何响应中收到一次这个头,就会强制该域名后续所有请求使用HTTPS。所以只在HTML页面(用户首次访问的入口)设置就足够了;如果服务器全局配置更方便,给所有响应加也没问题,毕竟这个头的内容很短,不会造成浪费。
4. X-Content-Type-Options
- 正确配置对象:所有Content-Type
- 原因:这个头禁止浏览器对资源的MIME类型进行嗅探,强制遵循响应头里的
Content-Type。它对所有资源都有安全意义——比如如果一个图片文件被错误嗅探为HTML/脚本,可能会触发恶意执行风险,静态资源同样需要这个防护。
5. X-Frame-Options
- 正确配置对象:仅
text/html和application/xhtml+xml - 原因:这个头是控制HTML页面是否允许被嵌入到第三方iframe中,静态资源不会被作为iframe的内容加载,所以只有HTML文档需要设置。
6. X-XSS-Protection
- 正确配置对象:仅
text/html和application/xhtml+xml - 原因:这个头是控制浏览器内置的XSS防护机制,针对的是HTML页面中的脚本注入攻击,静态资源不存在这类风险,无需设置。
修正后的配置对照表
| HTTP响应头 | text/html(含application/xhtml+xml) | 所有Content-Type |
|---|---|---|
| Content-Security-Policy | ✅ | ❌ |
| Referrer-Policy | ✅ | ✅ |
| Strict-Transport-Security | ✅ | ✅(可选,更方便) |
| X-Content-Type-Options | ✅ | ✅ |
| X-Frame-Options | ✅ | ❌ |
| X-XSS-Protection | ✅ | ❌ |
额外小建议
如果你的服务器支持,可以添加Permissions-Policy(原Feature Policy)头,用来控制HTML页面能使用的浏览器特性(比如摄像头、地理位置等),这个头也只需要给HTML文档设置即可。
内容的提问来源于stack exchange,提问作者Steve Eynon
相关产品推荐
相关产品推荐

