1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
---
title: Feature-Policy
slug: Web/HTTP/Headers/Feature-Policy
tags:
- Authorization
- Experimental
- Feature Policy
- Feature-Policy
- HTTP
- Permissions
- Reference
- Security
- Web
- header
translation_of: Web/HTTP/Headers/Feature-Policy
---
<div>{{HTTPSidebar}}</div>
<p><span class="seoSummary">HTTP の <strong><code>Feature-Policy</code></strong> ヘッダーは、自身のフレームおよび文書内の {{HTMLElement("iframe")}} 要素で、ブラウザーの機能を使用することを許可または拒否する仕組みを提供します。</span></p>
<div class="note">
<p>このヘッダーはまだ実験的な状態であり、随時変更される可能性があります。ウェブサイトに実装する際には注意してください。現在、このヘッダーは仕様では <code>Permissions-Policy</code> に改名されており、この記事は最終的にはその変更を反映して更新される予定です。</p>
</div>
<p>詳しくは、<a href="/ja/docs/Web/HTTP/Feature_Policy">機能ポリシー</a>の記事を参照してください。</p>
<table class="properties">
<tbody>
<tr>
<th scope="row">ヘッダー種別</th>
<td>{{Glossary("Response header", "レスポンスヘッダー")}}</td>
</tr>
<tr>
<th scope="row">{{Glossary("Forbidden header name", "禁止ヘッダー名")}}</th>
<td>はい</td>
</tr>
</tbody>
</table>
<h2 id="Syntax" name="Syntax">構文</h2>
<pre class="syntaxbox notranslate">Feature-Policy: <directive> <allowlist></pre>
<dl>
<dt><code><directive></code></dt>
<dd><code>allowlist</code> に適用される機能ポリシーディレクティブです。許可されているディレクティブ名の一覧は、以下の{{anch("Directives", "ディレクティブ")}}を参照してください。</dd>
<dt><code><allowlist></code></dt>
<dd>{{page("/ja/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy", "allowlist")}}</dd>
</dl>
<h2 id="Directives" name="Directives">ディレクティブ</h2>
<dl>
<dt>{{httpheader('Feature-Policy/accelerometer','accelerometer')}}</dt>
<dd>現在の文書が、端末の加速度に関する情報を、 {{DOMxRef("Accelerometer")}} インターフェイスを通じて収集することを許可するかどうかを制御します。</dd>
<dt>{{httpheader('Feature-Policy/ambient-light-sensor','ambient-light-sensor')}}</dt>
<dd>現在の文書が、端末の周囲の環境における光量についての情報を、 {{DOMxRef("AmbientLightSensor")}} インターフェイスを通じて収集することを許可するかどうかを制御します。</dd>
<dt>{{httpheader('Feature-Policy/autoplay','autoplay')}}</dt>
<dd>現在の文書で {{domxref("HTMLMediaElement")}} インターフェイスがメディアの自動再生をリクエストすることを無効にするかどうかを制御します。このポリシーが有効であり、ユーザーによる操作がなかった場合、 {{domxref("HTMLMediaElement.play()")}} が返す {{jsxref("Promise")}} が {{domxref("DOMException")}} で拒否されます。 {{HTMLELement("audio")}} および {{HTMLElement("video")}} 要素の <code>autoplay</code> 属性は無視されます。</dd>
<dt>{{httpheader('Feature-Policy/battery','battery')}}</dt>
<dd><a href="/ja/docs/Web/API/Battery_Status_API">Battery Status API</a> の使用を許可するかどうかを制御します。このポリシーが無効になっている場合、 {{DOMxRef("Navigator.getBattery","Navigator.getBattery()")}} が返す {{JSxRef("Promise")}} は {{Exception("NotAllowedError")}} の {{DOMxRef("DOMException")}} で拒否されます。</dd>
<dt>{{httpheader('Feature-Policy/camera', 'camera')}}</dt>
<dd>現在の文書が動画入力機器を使用することを許可するかどうかを制御します。このポリシーが無効であれば、 {{domxref("MediaDevices.getUserMedia", "getUserMedia()")}} が返す {{jsxref("Promise")}} が {{Exception("NotAllowedError")}} の {{DOMxRef("DOMException")}} で拒否されます。</dd>
<dt>{{HTTPHeader('Feature-Policy/display-capture', 'display-capture')}}</dt>
<dd>現在の文書が {{domxref("MediaDevices.getDisplayMedia", "getDisplayMedia()")}} メソッドを使用して画面の内容をキャプチャすることを許可するかどうかを制御します。このポリシーが無効であれば、表示内容をキャプチャする許可がない場合、 <code>getDisplayMedia()</code> から返却されるプロミスが {{Exception("NotAllowedError")}} で拒否されます。</dd>
<dt>{{httpheader('Feature-Policy/document-domain','document-domain')}}</dt>
<dd>現在の文書が {{domxref("document.domain")}} を設定することを許可するかどうかを制御します。このポリシーが無効な場合、 {{domxref("document.domain")}} を設定しようとすると失敗し、 {{Exception("SecurityError")}} の {{domxref("DOMException")}} が発生します。</dd>
<dt>{{httpheader('Feature-Policy/encrypted-media', 'encrypted-media')}}</dt>
<dd>現在の文書が <a href="/ja/docs/Web/API/Encrypted_Media_Extensions_API">Encrypted Media Extensions</a> API (EME) を使用することを許可するかどうかを制御します。このポリシーが無効であれば、 {{domxref("Navigator.requestMediaKeySystemAccess()")}} から返却された {{jsxref("Promise")}} が {{domxref("DOMException")}} で拒否されます。</dd>
<dt>{{httpheader('Feature-Policy/execution-while-not-rendered', 'execution-while-not-rendered')}}</dt>
<dd>表示されないフレーム内 (例えば iframe が <code><a href="/ja/docs/Web/HTML/Global_attributes/hidden">hidden</a></code> または <code>display: none</code> の場合) でタスクを実行するかどうかを制御します。</dd>
<dt>{{httpheader('Feature-Policy/execution-while-out-of-viewport', 'execution-while-out-of-viewport')}}</dt>
<dd>ビューポートの見える範囲外にあるフレーム内のタスクを実行するかどうかを制御します。</dd>
</dl>
<dl>
<dt>{{httpheader('Feature-Policy/fullscreen','fullscreen')}}</dt>
<dd>現在の文書が {{domxref('Element.requestFullScreen()')}} を使用することを許可するかどうかを制御します。このポリシーが無効であれば、返却された {{jsxref('Promise')}} が {{jsxref('TypeError')}} で拒否されます。</dd>
<dt>{{httpheader('Feature-Policy/geolocation','geolocation')}}</dt>
<dd>現在の文書が {{domxref('Geolocation')}} インターフェイスを使用することを許可するかどうかを制御します。このポリシーが無効であれば、 {{domxref('Geolocation.getCurrentPosition','getCurrentPosition()')}} および {{domxref('Geolocation.watchPosition','watchPosition()')}} を呼び出すと、関数のコールバックが呼び出され、 {{domxref('PositionError')}} コードが <code>PERMISSION_DENIED</code> になります。</dd>
<dt>{{httpheader('Feature-Policy/gyroscope','gyroscope')}}</dt>
<dd>現在の文書が {{DOMxRef("Gyroscope")}} インターフェイスを通じて、端末の方向に関する情報を収集することを許可するかどうかを制御します。</dd>
<dt>{{httpheader('Feature-Policy/layout-animations','layout-animations')}}</dt>
<dd>現在の文書がレイアウトアニメーションを表示することを許可するかどうかを制御します。</dd>
</dl>
<dl>
<dt>{{httpheader('Feature-Policy/legacy-image-formats','legacy-image-formats')}}</dt>
<dd>現在の文書が古い形式の画像を表示することを許可するかどうかを制御します。</dd>
</dl>
<dl>
<dt>{{httpheader('Feature-Policy/magnetometer','magnetometer')}}</dt>
<dd>現在の文書が {{DOMxRef("Magnetometer")}} インターフェイスを通じて、端末の方向に関する情報を収集することを許可するかどうかを制御します。</dd>
<dt>{{httpheader('Feature-Policy/microphone','microphone')}}</dt>
<dd>現在の文書がオーディオ入力端末を使用することを許可するかどうかを制御します。このポリシーが無効であれば、 {{domxref("MediaDevices.getUserMedia()")}} で返却された {{jsxref('Promise')}} が {{Exception("NotAllowedError")}} で拒否されます。</dd>
<dt>{{httpheader('Feature-Policy/midi', 'midi')}}</dt>
<dd>現在の文書が <a href="/ja/docs/Web/API/Web_MIDI_API">Web MIDI API</a> を使用することを許可するかどうかを制御します。このポリシーが無効であれば、 {{domxref("Navigator.requestMIDIAccess()")}} から返却された {{jsxref("Promise")}} が {{domxref("DOMException")}} で拒否されます。</dd>
<dt>{{httpheader('Feature-Policy/navigation-override','navigation-override')}}</dt>
<dd>ページ作成者が <a href="https://www.w3.org/TR/css-nav/">空間ナビゲーション</a>の動作を制御したり、完全にキャンセルしたりすることができる仕組みの利用可能性を制御します。</dd>
<dt>{{httpheader('Feature-Policy/oversized-images','oversized-images')}}</dt>
<dd>現在の文書が大きな画像をダウンロードして表示することを許可するかどうかを制御します。</dd>
<dt>{{httpheader('Feature-Policy/payment', 'payment')}}</dt>
<dd>現在の文書が <a href="/ja/docs/Web/API/Payment_Request_API">Payment Request API</a> を使用することを許可するかどうかを制御します。このポリシーが有効であれば、 {{domxref("PaymentRequest","PaymentRequest()")}} コンストラクターで {{Exception("SecurityError")}} の {{domxref("DOMException")}} が発生します。</dd>
<dt>{{httpheader('Feature-Policy/picture-in-picture', 'picture-in-picture')}}</dt>
<dd>現在の文書が、該当する API を使用して Picture-in-Picture モードで動画を再生することを許可するかどうかを制御します。</dd>
<dt>{{httpheader("Feature-Policy/publickey-credentials-get", "publickey-credentials-get")}}</dt>
<dd>現在の文書が <a href="/ja/docs/Web/API/Web_Authentication_API">Web Authentication API</a> を使用して、すでに保存されている公開鍵認証情報を再取得することを許可するかどうかを制御します (例: {{domxref("CredentialsContainer.get","navigator.credentials.get({publicKey: ..., ...})")}})。</dd>
<dt>{{httpheader('Feature-Policy/sync-xhr', 'sync-xhr')}}</dt>
<dd>現在の文書が同期 {{DOMxRef("XMLHttpRequest")}} リクエストを行うことを許可するかどうかを制御します。</dd>
<dt>{{httpheader('Feature-Policy/usb', 'usb')}}</dt>
<dd>現在の文書が <a href="https://wicg.github.io/webusb/">WebUSB API</a> を使用することを許可するかどうかを制御します。</dd>
<dt>{{httpheader('Feature-Policy/vr', 'vr')}} {{deprecated_inline}}</dt>
<dd>現在の文書が <a href="/ja/docs/Web/API/WebVR_API">WebVR API</a> の使用を許可されているかどうかを制御します。このポリシーが無効になっている場合、 {{domxref("Navigator.getVRDisplays","Navigator.getVRDisplays()")}} が返す {{jsxref("Promise")}} は {{domxref("DOMException")}} で拒否されます。 WebVR 標準は <a href="/ja/docs/Web/API/WebXR_Device_API">WebXR</a> に置き換えられつつあることに留意してください。</dd>
<dt>{{httpheader('Feature-Policy/wake-lock', 'wake-lock')}}</dt>
<dd>現在の文書が <a href="https://www.w3.org/TR/wake-lock/">Wake Lock API</a> を使用して、端末が省電力モードに入らないことを示すことを許可するかどうかを制御します。</dd>
<dt>{{httpheader('Feature-Policy/screen-wake-lock', 'screen-wake-lock')}}</dt>
<dd>現在の文書が <a href="/ja/docs/Web/API/Screen_Wake_Lock_API">Screen Wake Lock API</a> を使用して、端末が画面をオフにしたり暗くしたりしてはいけないことを示すことを許可するかどうかを制御します。</dd>
<dt>{{httpheader("Feature-Policy/web-share", "web-share")}}</dt>
<dd>現在の文書が Web Share API の {{domxref("Navigator.share","Navigator.share()")}} を使用して、テキスト、リンク、画像、その他のコンテンツをモバイルアプリなどのユーザーが任意に選択した任意の場所に共有することを許可するかどうかを制御します。</dd>
<dt>{{httpheader("Feature-Policy/xr-spatial-tracking", "xr-spatial-tracking")}}</dt>
<dd>現在の文書が <a href="/ja/docs/Web/API/WebXR_Device_API">WebXR Device API</a> を使用して WebXR セッションと対話することを許可するかどうかを制御します。</dd>
</dl>
<h2 id="Example" name="Example">例</h2>
<p>SecureCorp Inc. が、アプリケーションでマイクと Geolocation API を無効にしたがっているとします。以下の機能ポリシーを設定する HTTP レスポンスヘッダーを配信することで実現できます。</p>
<pre class="notranslate">Feature-Policy: microphone 'none'; geolocation 'none'</pre>
<p>オリジンのリストに <code>'none'</code> キーワードを指定すると、指定された機能がオリジンに関係なく、すべての閲覧コンテキスト (iframe を含む) で無効になります。</p>
<h2 id="Specifications" name="Specifications">仕様書</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">仕様書</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://w3c.github.io/webappsec-permissions-policy/#permissions-policy-http-header-field">Permissions Policy</a></td>
</tr>
</tbody>
</table>
<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>
<p>{{Compat("http.headers.Feature-Policy")}}</p>
<h2 id="See_also" name="See_also">関連情報</h2>
<ul>
<li><a href="/ja/docs/Web/HTTP/Feature_Policy">機能ポリシー</a></li>
<li><a href="/ja/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy">機能ポリシーの使用</a></li>
<li>{{DOMxRef("Document.featurePolicy")}} および {{DOMxRef("FeaturePolicy")}}</li>
<li><a class="external external-icon" href="https://chrome.google.com/webstore/detail/feature-policy-tester-dev/pchamnkhkeokbpahnocjaeednpbpacop" rel="noopener">Feature-Policy Tester (Chrome Developer Tools extension)</a></li>
<li>{{HTTPHeader("Content-Security-Policy")}}</li>
<li>{{HTTPHeader("Referrer-Policy")}}</li>
</ul>
|