feature-policy http响应头和标签已在chrome 93+、firefox 92+、safari 16.4+中完全废弃,必须改用permissions-policy,否则策略不生效;新语法为逗号分隔的等号结构,如camera=(), geolocation=('self'),禁用须用()而非'none'。

Feature-Policy 已被弃用,改用 Permissions-Policy
直接说结论:Feature-Policy HTTP 响应头和 <meta> 标签在所有主流浏览器中均已废弃(Chrome 93+、Firefox 92+、Safari 16.4+ 完全移除)。现在必须用 Permissions-Policy 替代,否则策略完全不生效。
常见错误现象:写了 Feature-Policy: geolocation 'none',但 DevTools 的 Application → Permissions 里依然能手动启用定位,或 navigator.geolocation 仍可调用 —— 这不是配置没生效,是浏览器压根不解析这个头了。
- 旧写法(无效):
<meta http-equiv="Feature-Policy" content="camera 'none'"> - 新写法(有效):
<meta http-equiv="Permissions-Policy" content="camera=()"> - HTTP 响应头也需同步改为:
Permissions-Policy: camera=(), microphone=()
Permissions-Policy 的语法和常见值怎么写
语法比 Feature-Policy 更严格:每个功能后跟 =()(禁止)、=('self')(仅同源)、=('https://a.com')(指定来源),不支持空格或逗号分隔的旧格式。
容易踩的坑:
-
geolocation不是location—— 写错名字策略就失效 -
usb=()和serial=()是不同功能,不能合并 - 多个策略用英文分号分隔:
Permissions-Policy: camera=(), geolocation=(), microphone=('self') -
'none'是非法值,必须用()表示空列表(即禁止)
典型示例(禁用摄像头、麦克风、地理位置,仅允许同源使用通知):Permissions-Policy: camera=(), microphone=(), geolocation=(), notifications=('self')
如何验证 Permissions-Policy 是否生效
不能只看响应头存在,要确认浏览器是否实际应用。最可靠方式是结合 DevTools 和 JS 行为验证:
- 打开 Chrome DevTools → Application → Permissions → 查看对应权限的“Policy”列是否显示
Disabled by Permissions-Policy - 在 Console 执行
navigator.permissions.query({name: 'geolocation'}),返回{state: "denied"}才算成功 - 如果页面嵌入 iframe,需在 iframe 的响应头中单独设置策略(父页面的策略不继承)
- 注意:某些 API(如
document.hasStorageAccess())不受 Permissions-Policy 控制,它由 Storage Access API 单独管理
服务端设置 Permissions-Policy 头的注意事项
HTTP 响应头优先级高于 <meta>,且 <meta> 只对 HTML 文档生效(对 JS/CSS/图片等资源无效),所以关键策略务必通过服务端下发。
- Nginx 配置示例:
add_header Permissions-Policy "geolocation=(), camera=()"; - Express.js 示例:
res.setHeader('Permissions-Policy', "geolocation=(), camera=()"); - Cloudflare Workers 中需显式添加响应头,Worker 默认不透传该头
- 注意:如果用了 CSP 的
frame-ancestors或frame-src,要确保嵌入方域名也在 Permissions-Policy 的白名单中,否则 iframe 内策略会静默失败
复杂点在于策略粒度很细,比如 sync-xhr=() 会阻断所有同步 XMLHttpRequest(包括 jQuery.ajax 的 async: false),而很多老库依赖它 —— 开启前务必全链路测试。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











