Permissions-Policy

实验性: 这是一项实验性技术
在将其用于生产之前,请仔细检查浏览器兼容性表格

Permissions-Policy 响应标头提供了一种可以在本页面或包含的 iframe 上启用或禁止浏览器特性的机制。

更多的信息,请查看Feature Policy

Header type Response header
Forbidden header name yes

语法

Permissions-Policy: <directive> <allowlist>
<allowlist>

一个来源列表,在括号中包含的以下一个或多个值,并用空格分隔:

  • *: 允许在当前文档和所有包含的内容(比如 iframes)中使用本特性。
  • 'self': 允许在当前文档中使用本特性,但在包含的内容(比如 iframes)仍使用原值。
  • 'src': (只在 iframe 中允许) 只要在src 中的 URL 和加载 iframe 用的 URL 相同,则本特性在 iframe 中允许,
  • 'none': 从最上层到包含的内容都禁止本特性。 <origin(s)>: 在特定的源中允许,源 URL 以空格分割。

*none 值只允许单独使用,而 selfsrc 值可以与多个源一起使用。

所有的特性都有一个如下的默认的 allowlist

  • *: 本特性默认在最上层和包含的内容中(iframes)允许。
  • 'self': 本特性默认在最上层允许,而包含的内容中(iframes)使用源地址相同设定。也就是说本特性在 iframe 中不允许跨域访问。
  • 'none': 本特性默认在最上层和包含的内容中(iframes)都禁止。

指令

autoplay 实验性

控制是否允许当前文档自动播放媒体。这种控制是通过接口 HTMLMediaElement 来实现。当这种规则被禁用,而且没有用户操作的时候,HTMLMediaElement.play() 返回的 Promise (en-US) 会拒绝并抛出一个 DOMException 异常。<audio><video> 上的 autoplay 属性会被忽略。

camera

控制是否允许当前文档使用视频输入设备。当这种规则被禁用时,MediaDevices.getUserMedia() 返回的 Promise 会拒绝并抛出 NotAllowedError DOMException 异常。

document-domain (en-US) 实验性

控制是否允许当前文档设置 document.domain。当这种规则被禁用时,尝试设置 document.domain 会失败并抛出 SecurityError DOMException 异常。

encrypted-media (en-US) 实验性

控制是否允许当前文档使用 Encrypted Media Extension (en-US) API(EME)。当这种规则被禁用时,Navigator.requestMediaKeySystemAccess() (en-US) 返回的 Promise (en-US) 会拒绝并抛出 DOMException 异常。

fullscreen (en-US)

控制是否允许当前文档使用 Element.requestFullScreen()。当这种规则被禁用时,返回的 Promise 会拒绝并抛出 TypeError

geolocation (en-US)

控制是否允许当前文档使用 Geolocation 接口。当这种规则被禁用时,调用 getCurrentPosition()watchPosition() 会返回包含 PERMISSION_DENIEDPositionError

microphone (en-US)

控制是否允许当前文档使用音频输入设备。当这种规则被禁用时,MediaDevices.getUserMedia() 返回的 Promise 会拒绝并抛出错误 NotAllowedError

midi (en-US)

控制是否允许当前文档使用 Web MIDI API (en-US)。当这种规则被禁用时,Navigator.requestMIDIAccess() (en-US) 返回的 Promise 会拒绝并抛出错误 DOMException

payment (en-US)

控制是否允许当前文档使用 Payment Request API。当这种规则被启用时,构造函数 PaymentRequest() (en-US) 会抛出错误 SecurityError

vr / xr

控制是否允许当前文档使用 WebVR API。当这种规则被禁用时,Navigator.getVRDisplays() (en-US) 返回的 Promise 会拒绝并抛出错误 DOMException

示例

SecureCorp Inc. 公司想要在应用中禁用震动和定位 API,则可以在返回的 response 中传递以下定义权限策略的 HTTP 的标头信息:

Permissions-Policy: vibrate 'none'; geolocation 'none'

通过使用 'none' 关键词,不管原来如何设定,这些特性在所有浏览的上下文中都会被禁用。

规范

Specification
Permissions Policy
# permissions-policy-http-header-field

浏览器兼容性

BCD tables only load in the browser

参见