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会拒绝并抛出一个DOMException异常。在<audio><video>上的autoplay属性会被忽略。
camera
控制是否允许当前文档使用视频输入设备。当这种规则被启用时,MediaDevices.getUserMedia()返回的the Promise会拒绝并抛出错误NotAllowedError。
document-domain
控制是否允许当前文档设置document.domain。当这种规则被启用时,尝试设置document.domain会失败并抛出SecurityError DOMException异常。
encrypted-media
控制是否允许当前文档使用Encrypted Media Extensions API (EME)。当这种规则被启用时,Navigator.requestMediaKeySystemAccess()返回的Promise会拒绝并抛出DOMException异常。
fullscreen
控制是否允许当前文档使用Element.requestFullScreen()。当这种规则被启用时,返回的Promise会拒绝并抛出TypeError
geolocation
控制是否允许当前文档使用Geolocation接口。当这种规则被启用时,调用getCurrentPosition()watchPosition()会返回包含PERMISSION_DENIED的 PositionError
microphone
控制是否允许当前文档使用音频输入设备。当这种规则被启用时,MediaDevices.getUserMedia()返回的the Promise会拒绝并抛出错误NotAllowedError。
midi
控制是否允许当前文档使用Web MIDI API。当这种规则被启用时,Navigator.requestMIDIAccess() 返回的the Promise会拒绝并抛出错误DOMException。
payment
控制是否允许当前文档使用Payment Request API。当这种规则被启用时,构造器PaymentRequest() 会抛出错误SecurityError。
vr / xr
控制是否允许当前文档使用WebVR API。当这种规则被启用时,Navigator.getVRDisplays() 返回的the Promise会拒绝并抛出错误DOMException。

示例

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

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

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

规范

Specification Status Comment
Permissions Policy
Feature-Policy
Editor's Draft Initial definition.

浏览器兼容

BCD tables only load in the browser

参见