Feature-Policy

Experimental: 这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

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

更多的信息,请查看Feature Policy

Header type Response header
Forbidden header name yes

语法

Feature-Policy: <directive> <allowlist>

<allowlist>

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

*(在所有源地址启用)或'none'(在所有源地址禁用) 只允许单独使用,而'self''src'可以与多个源地址一起使用。

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

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

指令

autoplay

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

camera

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

document-domain (en-US)

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

encrypted-media (en-US)

控制是否允许当前文档使用Encrypted Media Extensions (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()返回的 the Promise会拒绝并抛出错误 NotAllowedError

midi (en-US)

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

payment (en-US)

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

vr (en-US) / xr

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

示例

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

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

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

规范

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

浏览器兼容

BCD tables only load in the browser

参见