Apache已弃用Feature-Policy,必须改用Permissions-Policy;需通过Header always set在httpd.conf或独立配置文件中设置,启用mod_headers模块,并用curl或DevTools验证响应头是否生效。

Apache 不再支持 Feature-Policy,它已被弃用并由 Permissions-Policy 取代。当前(2026年)所有主流浏览器已完全移除对 Feature-Policy 的支持,继续配置该头无效,且可能干扰策略调试。
必须改用 Permissions-Policy
这是唯一有效、标准化的替代方案,用于控制浏览器特性(如摄像头、麦克风、地理位置、自动播放等)的启用权限:
-
语法统一:格式为
Permissions-Policy: feature=(source-list),多个策略用英文逗号分隔 -
源列表规则:支持
'self'、'none'、https://example.com或*(仅限部分特性,如geolocation不允许通配) - 必须使用 Header always set:确保错误响应(如 404、500)也携带该头,防止策略绕过
推荐基础策略示例
以下配置适合大多数网站,禁用高风险特性,同时保留必要功能:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<ifmodule mod_headers.c> Header always set Permissions-Policy "geolocation=(), microphone=(), camera=(), usb=(), payment=(), accelerometer=(), gyroscope=(), magnetometer=(), fullscreen=(self), interest-cohort=()" </ifmodule>
-
geolocation=()表示完全禁止,括号内为空即拒绝所有来源 -
fullscreen=(self)允许同源页面调用全屏,兼顾兼容性与安全 -
interest-cohort=()禁用 FLoC 相关追踪(仍建议显式声明)
配置位置与生效前提
必须满足以下三点,策略才能稳定生效:
-
写在全局作用域:放入
httpd.conf底部或/etc/httpd/conf.d/permissions-policy.conf,且位于所有外部 -
确认模块已启用:运行
apachectl -M | grep headers,无输出则需启用mod_headers -
避免 .htaccess 覆盖:禁用目录级覆盖(
AllowOverride None),防止应用层误删或弱化策略
验证与调试要点
部署后务必验证实际响应头,而非仅检查配置文件:
- 用
curl -I https://yoursite.com查看是否返回Permissions-Policy头 - 打开 Chrome DevTools → Network → 刷新任意资源 → Response Headers 中查找该字段
- 若策略未出现,检查 Apache 错误日志:
tail -f /var/log/httpd/error_log,常见错误是Invalid command 'Header'(模块未启用)或语法拼写错误(如漏掉引号)










