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>L'en-tête HTTP <strong><code>Feature-Policy</code></strong> est un mécanisme permettant de permettre ou d'interdire l'utilisation de fonctionnalités du navigateur dans son propre cadre et dans ceux de tous les éléments {{HTMLElement("iframe")}} que le document contient.</p>
<div class="note">
<p><strong>Note :</strong> Cet en-tête est toujours au stade expérimental, et est sujet à être modifié à tout moment. Méfiez-vous en si vous souhaitez l'implanter sur vos sites. Il a maintenant été renommé <code>Permissions-Policy</code> dans la spécification, et cet article sera mis à jour pour refléter ce changement.</p>
</div>
<p>Pour plus d'informations, vour l'article principal sur <a href="/docs/Web/HTTP/Feature_Policy">Feature Policy</a>.</p>
<table class="properties">
<tbody>
<tr>
<th scope="row">Type d'en-tête</th>
<td>{{Glossary("Response header")}}</td>
</tr>
<tr>
<th scope="row">{{Glossary("Forbidden header name")}}</th>
<td>oui</td>
</tr>
</tbody>
</table>
<h2 id="Syntaxe">Syntaxe</h2>
<pre class="syntaxbox">Feature-Policy: <directive> <allowlist></pre>
<dl>
<dt><code><directive></code></dt>
<dd>La directive de Feature Policy sur laquelle appliquer la liste de permissions <code>allowlist</code>. Voir {{anch("Directives")}} ci-dessous pour une liste des noms de directives autorisés.</dd>
<dt><code><allowlist></code></dt>
<dd>{{page("Web/HTTP/Feature_Policy/Using_Feature_Policy", "allowlist")}}</dd>
</dl>
<h2 id="Directives">Directives</h2>
<dl>
<dt>{{httpheader('Feature-Policy/accelerometer','accelerometer')}}</dt>
<dd>Contrôle si le document courant est autorisé à recueillir des informations à propos de l'accélération de l'appareil au moyen de l'interface {{DOMxRef("Accelerometer")}}.</dd>
<dt>{{httpheader('Feature-Policy/ambient-light-sensor','ambient-light-sensor')}}</dt>
<dd>Contrôle si le le document courant est autorisé à recueillir des informations à propos de la luminosité ambiante de l'appareil au moyen de l'interface {{DOMxRef("AmbientLightSensor")}}.</dd>
<dt>{{httpheader('Feature-Policy/autoplay','autoplay')}}</dt>
<dd>Contrôle si le document courant est autorisé à jouer automatiquement des médias chargés au moyen de l'interface {{domxref("HTMLMediaElement")}}. Quand cette fonctionnalité est désactivée et qu'il n'y a pas eu d'action de la part de l'utilisateur, la promesse ({{jsxref("Promise")}}) retournée par {{domxref("HTMLMediaElement.play()")}} sera rejetée avec une exception {{domxref("DOMException")}}. L'attribut <code>autoplay</code> sur les éléments {{HTMLELement("audio")}} et {{HTMLElement("video")}} sera ignoré.</dd>
<dt>{{httpheader('Feature-Policy/battery','battery')}}</dt>
<dd>Contrôle si l'utilisation de l'<a href="/docs/Web/API/Battery_Status_API">API Battery Status</a> est autorisé. Quand cette fonctionnalité est désactivée, la promesse retournée par {{DOMxRef("Navigator.getBattery","Navigator.getBattery()")}} sera rejetée avec une {{DOMxRef("DOMException")}} {{Exception("NotAllowedError")}}.</dd>
<dt>{{httpheader('Feature-Policy/camera', 'camera')}}</dt>
<dd>Contrôle si le document courant est autorisé à utiliser l'appareil photographique du système. Quand cette fonctionnalité est désactivée, la promesse retournée par {{domxref("MediaDevices.getUserMedia", "getUserMedia()")}} sera rejetée avec une {{DOMxRef("DOMException")}} {{Exception("NotAllowedError")}}.</dd>
<dt>{{HTTPHeader('Feature-Policy/display-capture', 'display-capture')}}</dt>
<dd>Contrôle si le document courant est autorisé ou non à utiliser la méthode {{domxref("MediaDevices.getDisplayMedia", "getDisplayMedia()")}} pour effectuer une capture d'écran. Quand cette fonctionnalité est désactivée, la promesse retounrée par <code>getDisplayMedia()</code> sera rejetée avec une exception {{Exception("NotAllowedError")}} si la permission de prendre une capture d'écran n'est pas obtenue.</dd>
<dt>{{httpheader('Feature-Policy/document-domain','document-domain')}}</dt>
<dd>Contrôle si le document courant est autorisé à définir la propriété {{domxref("document.domain")}}. Quand cette directive est désactivée, tenter de modifier {{domxref("document.domain")}} échouera et lèvera une {{domxref("DOMException")}} {{Exception("SecurityError")}}.</dd>
<dt>{{httpheader('Feature-Policy/encrypted-media', 'encrypted-media')}}</dt>
<dd>Contrôle si le document courant est autorisé à utiliser l'API <a href="/en-US/docs/Web/API/Encrypted_Media_Extensions_API">Encrypted Media Extensions</a> (EME). Quand cette directive est désactivée, la promesse retournée par {{domxref("Navigator.requestMediaKeySystemAccess()")}} sera rejecté avec une {{domxref("DOMException")}}.</dd>
<dt>{{httpheader('Feature-Policy/execution-while-not-rendered', 'execution-while-not-rendered')}}</dt>
<dd>Contrôle si les tâches des cadres doivent être exécutées s'ils ne seront pas rendus à l'écran (par exemple si un <code><iframe></code> est <code><a href="/en-US/docs/Web/HTML/Global_attributes/hidden">hidden</a></code> ou <code>display: none</code>).</dd>
<dt>{{httpheader('Feature-Policy/execution-while-out-of-viewport', 'execution-while-out-of-viewport')}}</dt>
<dd>Contrôle si les tâches des cadres doivent être exécutées quand ils sont en dehors du cadre visible.</dd>
</dl>
<dl>
<dt>{{httpheader('Feature-Policy/fullscreen','fullscreen')}}</dt>
<dd>Contrôle si le document courant est autorisé à utiliser {{DOMxRef("Element.requestFullScreen()")}}. Quand cette directive est désactivée, la promesse retournée sera rejetée avec une exception {{JSxRef("TypeError")}}.</dd>
<dt>{{httpheader('Feature-Policy/geolocation','geolocation')}}</dt>
<dd>Contrôle si le document courant est autorisé à utiliser l'interface {{domxref('Geolocation')}}. Quand cette directive est désactivée, les appels à {{domxref('Geolocation.getCurrentPosition','getCurrentPosition()')}} et {{domxref('Geolocation.watchPosition','watchPosition()')}} causeront un appel de leurs fonctions de rappel avec une exception {{domxref('PositionError')}} dont le code est <code>PERMISSION_DENIED</code>.</dd>
<dt>{{httpheader('Feature-Policy/gyroscope','gyroscope')}}</dt>
<dd>Contrôle si le document courant est autorisé à recueillir des informations à propos de l'orientation de l'appareil au moyen de l'interface {{DOMxRef("Gyroscope")}}.</dd>
<dt>{{httpheader('Feature-Policy/layout-animations','layout-animations')}}</dt>
<dd>Contrôle si le document courant est autorisé à afficher des animations de mise en page.</dd>
</dl>
<dl>
<dt>{{httpheader('Feature-Policy/legacy-image-formats','legacy-image-formats')}}</dt>
<dd>Contrôle si le document courant est autorisé à afficher des images dans des formats du passé.</dd>
</dl>
<dl>
<dt>{{httpheader('Feature-Policy/magnetometer','magnetometer')}}</dt>
<dd>Contrôle si le document courant est autorisé à recueillir des informations à propos de l'orientation au moyen de l'interface {{DOMxRef("Magnetometer")}}.</dd>
<dt>{{httpheader('Feature-Policy/microphone','microphone')}}</dt>
<dd>Contrôle si le document courant est autorisé à utiliser le microphone de l'appareil. Quand cette fonctionnalité est désactivée, la promesse retournée par {{domxref("MediaDevices.getUserMedia()")}} sera rejetée avec une exception {{Exception("NotAllowedError")}}.</dd>
<dt>{{httpheader('Feature-Policy/midi', 'midi')}}</dt>
<dd>Contrôle si le document courant est autorisé à utiliser l'<a href="/en-US/docs/Web/API/Web_MIDI_API">API Web MIDI</a>. Quand cette fonctionnalité est désactivée, la promesse retournée par {{domxref("Navigator.requestMIDIAccess()")}} sera rejetée avec une exception {{domxref("DOMException")}}.</dd>
<dt>{{httpheader('Feature-Policy/navigation-override','navigation-override')}}</dt>
<dd>Contrôle la disponibilité des mécanismes qui permettent à l'auteur de la page de prendre le contrôle sur le comportment de la <a href="https://www.w3.org/TR/css-nav/">navigation spatiale</a>, ou de l'annuler complètement.</dd>
<dt>{{httpheader('Feature-Policy/oversized-images','oversized-images')}}</dt>
<dd>Contrôle si le document courant est autorisé à télécharger et afficher des images lourdes.</dd>
<dt>{{httpheader('Feature-Policy/payment', 'payment')}}</dt>
<dd>Contrôle si le document courant est autorisé à utiliser l'<a href="/en-US/docs/Web/API/Payment_Request_API">API Payment Request</a>. Quand cette directive est désactivée, le constructeur {{domxref("PaymentRequest","PaymentRequest()")}} lèvera une {{domxref("DOMException")}} {{Exception("SecurityError")}}.</dd>
<dt>{{httpheader('Feature-Policy/picture-in-picture', 'picture-in-picture')}}</dt>
<dd>Controls whether the current document is allowed to play a video in a Picture-in-Picture mode via the corresponding API.</dd>
<dt>{{httpheader("Feature-Policy/publickey-credentials-get", "publickey-credentials-get")}}</dt>
<dd>Contrôle si le document courant est autorisé à use the <a href="/en-US/docs/Web/API/Web_Authentication_API">Web Authentication API</a> to retreive already stored public-key credentials, i.e. via {{domxref("CredentialsContainer.get","navigator.credentials.get({publicKey: ..., ...})")}}.</dd>
<dt>{{httpheader('Feature-Policy/sync-xhr', 'sync-xhr')}}</dt>
<dd>Contrôle si le document courant est autorisé à make synchronous {{DOMxRef("XMLHttpRequest")}} requests.</dd>
<dt>{{httpheader('Feature-Policy/usb', 'usb')}}</dt>
<dd>Contrôle si le document courant est autorisé à use the <a href="https://wicg.github.io/webusb/">WebUSB API</a>.</dd>
<dt>{{httpheader('Feature-Policy/vr', 'vr')}} {{deprecated_inline}}</dt>
<dd>Contrôle si le document courant est autorisé à use the <a href="/en-US/docs/Web/API/WebVR_API">WebVR API</a>. Quand cette directive est désactivée, la promesse retournée par {{domxref("Navigator.getVRDisplays","Navigator.getVRDisplays()")}} sera rejetée avec une {{domxref("DOMException")}}. Gardez en tête que la norme WebVR est en cours de remplacement au profit de <a href="/en-US/docs/Web/API/WebXR_Device_API">WebXR</a>.</dd>
<dt>{{httpheader('Feature-Policy/wake-lock', 'wake-lock')}}</dt>
<dd>Contrôle si le document courant est autorisé à utiliser l'<a href="https://www.w3.org/TR/wake-lock/">API Wake Lock</a> pour indiquer que l'appareil ne devrait se mettre en veille.</dd>
<dt>{{httpheader('Feature-Policy/screen-wake-lock', 'screen-wake-lock')}}</dt>
<dd>Contrôle si le document courant est autorisé à utiliser l'<a href="/en-US/docs/Web/API/Screen_Wake_Lock_API">API Screen Wake Lock</a> pour indiquer que l'appareil ne devrait pas assombrir ou éteindre l'écran.</dd>
<dt>{{httpheader("Feature-Policy/web-share", "web-share")}}</dt>
<dd>Contrôle si le document courant est autorisé à utiliser la méthode {{domxref("Navigator.share","Navigator.share()")}} de l'API Web Share pour partager du texte, des liens, des images et d'autres contenus à des destinations arbitraires sur le choix de l'utilisateur, par exemple à des applications mobiles.</dd>
<dt>{{httpheader("Feature-Policy/xr-spatial-tracking", "xr-spatial-tracking")}}</dt>
<dd>Contrôle si le document courant est autorisé à utiliser l'<a href="/en-US/docs/Web/API/WebXR_Device_API">API WebXR Device</a> pour interagir avec une WebXR.</dd>
</dl>
<h2 id="Exemple">Exemple</h2>
<p>SecureCorp Inc. souhaite désactiver les API du microphone et de géolocalisation dans son application. Elle peut le faire en délivrant l'en-tête de réponse HTTP suivant pour définir une réglementation des fonctionnalités :</p>
<pre>Feature-Policy: microphone 'none'; geolocation 'none'</pre>
<p>En spécifiant la valeur <code>'none'</code> pour liste des origines, les fonctionnalités auquel la valeur est appliquée seront désactivées pour tous les contextes de navigation (incluant tout les cadres <code><iframe></code>), quelle que soit leur origine.</p>
<h2 id="Spécifications">Spécifications</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Spécification</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="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2>
<p>{{Compat("http.headers.Feature-Policy")}}</p>
<h2 id="Voir_aussi">Voir aussi</h2>
<ul>
<li><a href="/en-US/docs/Web/HTTP/Feature_Policy">Feature Policy</a></li>
<li><a href="/en-US/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy">Utiliser Feature Policy</a></li>
<li>{{DOMxRef("Document.featurePolicy")}} and {{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>
|