Feature-Policy
==============

**Expérimental:** **Cette fonction est expérimentale**  
Puisque cette fonction est toujours en développement dans certains navigateurs, veuillez consulter le tableau de compatibilité pour les préfixes à utiliser selon les navigateurs.  
Il convient de noter qu'une fonctionnalité expérimentale peut voir sa syntaxe ou son comportement modifié dans le futur en fonction des évolutions de la spécification.

**Attention :** Cet en-tête a maintenant été renommé `Permissions-Policy` dans la spécification, et cet article sera mis à jour pour refléter ce changement.

L'en-tête HTTP **`Feature-Policy`** fournit un mécanisme pour permettre ou interdire l'utilisation de fonctionnalités du navigateur pour le document courant et le contenu que ce dernier embarquerait via des éléments `<iframe>`.

Pour plus d'informations, voir l'article principal sur les règles de gestion des fonctionnalités (*Feature Policy*).

|  |  |
| --- | --- |
| Type d'en-tête | En-tête de réponse |
| Nom d'en-tête interdit | Oui |

Syntaxe
-------


```http
Feature-Policy: <directive> <allowlist>
```


`<directive>`

La directive de fonctionnalité à laquelle s'applique la liste d'autorisation `allowlist`. Voir la section Directives ci-après pour les noms de directive autorisés.

`<allowlist>`

Une liste d'autorisation contenant des origines, décrites par une ou plusieurs des valeurs suivantes, et séparées par des espaces :

* `*` : La fonctionnalité est autorisée pour ce document ainsi que l'ensemble des contextes de navigation imbriqués (via les éléments `<iframe>`) quelles que soient leurs origines.
* `'self'` : La fonctionnalité sera autorisée dans ce document et pour tous les contextes de navigation imbriqués de la même origine. La fonctionnalité n'est pas autorisée pour les contextes de navigation d'autres origines.
* `'src'` : Pour l'attribut `allow` d'une *iframe* uniquement. La fonctionnalité sera autorisée pour cette *iframe* uniquement si le document qui y est chargé provient de la même origine que celle indiquée par l'attribut `src` de l'élément HTML.

**Note :** L'origine `'src'` est uniquement utilisée pour la liste `allow` d'une *iframe*. Pour ces éléments, il s'agit de la valeur par défaut pour `allowlist`.
* `'none'` : La fonctionnalité est désactivée pour le document (niveau le plus haut) et les contextes de navigation imbriqués.
* `<origin(s)>` : La fonctionnalité est autorisée pour des origines distinctes (par exemple, `https://example.com`). Lorsqu'on indique plusieurs origines, celles-ci doivent être séparées par un espace.

Les valeurs `*` (autorisation pour toutes les origines) ou `'none'` (désactivation pour toutes les origines) peuvent être utilisées seules. `'self'` et `'src'` peuvent, quant à elles, être utilisées avec une ou plusieurs origines.

Chaque fonctionnalité en question possède une liste d'autorisation par défaut qui est : `*`, `'self'`, ou `'none'`.

Directives
----------

`accelerometer`

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 `Accelerometer` (en-US).

`ambient-light-sensor` (en-US)

Contrôle si le document courant est autorisé à recueillir des informations à propos de la luminosité ambiante de l'appareil au moyen de l'interface `AmbientLightSensor` (en-US).

`autoplay` (en-US)

Contrôle si le document courant est autorisé à jouer automatiquement des médias chargés au moyen de l'interface `HTMLMediaElement`. Quand cette fonctionnalité est désactivée et qu'il n'y a pas eu d'action de la part de l'utilisatrice ou l'utilisateur, la promesse (`Promise`) retournée par `HTMLMediaElement.play()` sera rejetée avec une exception `DOMException`. L'attribut `autoplay` sur les éléments `<audio>` et `<video>` sera ignoré.

`battery` (en-US)

Contrôle si l'utilisation de l'API Battery Status est autorisé. Quand cette fonctionnalité est désactivée, la promesse retournée par `Navigator.getBattery()` sera rejetée avec une exception `DOMException` `NotAllowedError`.

`camera` (en-US)

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 `getUserMedia()` sera rejetée avec une exception `DOMException` `NotAllowedError`.

`display-capture` (en-US)

Contrôle si le document courant est autorisé ou non à utiliser la méthode `getDisplayMedia()` (en-US) pour effectuer une capture d'écran. Quand cette fonctionnalité est désactivée, la promesse retounrée par `getDisplayMedia()` sera rejetée avec une exception `NotAllowedError` si la permission de prendre une capture d'écran n'est pas obtenue.

`document-domain` (en-US)

Contrôle si le document courant est autorisé à définir la propriété `document.domain`. Quand cette directive est désactivée, tenter de modifier `document.domain` échouera et lèvera une exception `DOMException` `SecurityError`.

`encrypted-media` (en-US)

Contrôle si le document courant est autorisé à utiliser l'API Encrypted Media Extensions (en-US) (EME). Quand cette directive est désactivée, la promesse retournée par `Navigator.requestMediaKeySystemAccess()` (en-US) sera rejetée avec une exception `DOMException`.

`execution-while-not-rendered`

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 élément `<iframe>` est masqué via l'attribut `hidden` ou `display: none`).

`execution-while-out-of-viewport`

Contrôle si les tâches des cadres doivent être exécutées quand ils sont en dehors de la zone d'affichage.

`fullscreen` (en-US)

Contrôle si le document courant est autorisé à utiliser `Element.requestFullScreen()`. Quand cette directive est désactivée, la promesse retournée sera rejetée avec une exception `TypeError`.

`gamepad` (en-US)

Contrôle si le document courant peut utiliser l'API Gamepad. Lorsque cette fonctionnalité n'est pas autorisée, `Navigator.getGamepads()` lèvera une exception (`DOMException`) `SecurityError`, et les évènements `gamepadconnected` et `gamepaddisconnected` ne seront pas déclenchés.

`geolocation` (en-US)

Contrôle si le document courant est autorisé à utiliser l'interface `Geolocation`. Quand cette directive est désactivée, les appels à `getCurrentPosition()` et `watchPosition()` causeront un appel de leurs fonctions de rappel avec une exception `PositionError` (en-US) dont le code est `PERMISSION_DENIED`.

`gyroscope` (en-US)

Contrôle si le document courant est autorisé à recueillir des informations à propos de l'orientation de l'appareil au moyen de l'interface `Gyroscope` (en-US).

`layout-animations` (en-US)

Contrôle si le document courant est autorisé à afficher des animations de mise en page.

`legacy-image-formats` (en-US)

Contrôle si le document courant est autorisé à afficher des images dans des formats historiques.

`magnetometer` (en-US)

Contrôle si le document courant est autorisé à recueillir des informations à propos de l'orientation au moyen de l'interface `Magnetometer` (en-US).

`microphone` (en-US)

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 `MediaDevices.getUserMedia()` sera rejetée avec une exception `NotAllowedError`.

`midi` (en-US)

Contrôle si le document courant est autorisé à utiliser l'API Web MIDI (en-US). Quand cette fonctionnalité est désactivée, la promesse retournée par `Navigator.requestMIDIAccess()` (en-US) sera rejetée avec une exception `DOMException`.

`navigation-override`

Contrôle la disponibilité des mécanismes qui permettent à la page de prendre le contrôle sur le comportement de la navigation spatiale, ou de l'annuler complètement.

`oversized-images` (en-US)

Contrôle si le document courant est autorisé à télécharger et afficher des images lourdes.

`payment` (en-US)

Contrôle si le document courant est autorisé à utiliser l'API Payment Request. Quand cette directive est désactivée, le constructeur `PaymentRequest()` (en-US) lèvera une exception `DOMException` `SecurityError`.

`picture-in-picture` (en-US)

Contrôle si le document courant peut jouer une vidéo avec l'incrustation vidéo avec l'API correspondante.

`publickey-credentials-get` (en-US)

Contrôle si le document courant est autorisé à utiliser l'API Web Authentication afin de récupérer des informations d'authentification avec clé publique (par exemple avec `navigator.credentials.get({publicKey: ..., ...})`) déjà enregistrées.

`speaker-selection` (en-US)

Contrôle si le document courant est autorisé à utiliser l'API Audio Output Devices (en-US) afin d'énumérer et de sélectionner les haut-parleurs.

`sync-xhr` (en-US)

Contrôle si le document courant est autorisé à réaliser des requêtes `XMLHttpRequest`.

`unoptimized-images` (en-US) 
Expérimental

Non-standard

Contrôle si le document courant est autorisé à télécharger et à afficher des images qui ne sont pas optimisées.

`unsized-media` (en-US) 
Expérimental

Non-standard

Contrôle si le document courant est autorisé à modifier la taille des éléments média après que la disposition initiale a été terminée.

`usb` (en-US)

Contrôle si le document courant est autorisé à utiliser l'API WebUSB.

`screen-wake-lock` (en-US)

Contrôle si le document courant est autorisé à utiliser l'API Screen Wake Lock (en-US) pour indiquer que l'appareil ne devrait pas assombrir ou éteindre l'écran.

`web-share` (en-US)

Contrôle si le document courant est autorisé à utiliser la méthode `Navigator.share()` de l'API Web Share (en-US) pour partager du texte, des liens, des images et d'autres contenus vers des cibles arbitraires, par exemple à des applications mobiles.

`xr-spatial-tracking` (en-US)

Contrôle si le document courant est autorisé à utiliser l'API WebXR Device pour interagir avec une session WebXR.

Exemple
-------

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ègle de gestion des fonctionnalités :


```http
Feature-Policy: microphone 'none'; geolocation 'none'
```


En spécifiant la valeur `'none'` pour liste des origines, les fonctionnalités auxquelles la valeur est appliquée seront désactivées pour tous les contextes de navigation (incluant tous les cadres `<iframe>`), quelle que soit leur origine.

Spécifications
--------------

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

Compatibilité des navigateurs
-----------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Voir aussi
----------

* Gestion des fonctionnalités
* Utiliser la gestion des fonctionnalités
* `Document.featurePolicy` and `FeaturePolicy`
* *Feature-Policy Tester* (une extension pour les outils de développement Chrome)
* `Content-Security-Policy`
* `Referrer-Policy`