Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

En-tête Permissions-Policy

Limited availability

Cette fonctionnalité n'est pas Compatible car elle ne fonctionne pas dans certains des navigateurs les plus utilisés.

Expérimental: Il s'agit d'une technologie expérimentale.
Vérifiez attentivement le tableau de compatibilité des navigateurs avant de l'utiliser en production.

L'en-tête de réponse HTTP Permissions-Policy fournit un mécanisme pour autoriser ou refuser l'utilisation de fonctionnalités du navigateur dans un document ou dans tout élément HTML <iframe> du document.

Pour plus d'informations, consultez l'article principal Politique d'autorisations.

Type d'en-tête En-tête de réponse

Syntaxe

http
Permissions-Policy: <directive>=<allowlist>
<directive>

La directive de la politique d'autorisations à laquelle appliquer la liste d'autorisations allowlist. Voir Directives ci-dessous pour la liste des noms de directives autorisés.

<allowlist>

Une liste d'autorisations est une liste d'origines qui prend une ou plusieurs des valeurs suivantes, contenues entre parenthèses et séparées par des espaces :

* (joker)

La fonctionnalité sera autorisée dans ce document, ainsi que dans tous les contextes de navigation imbriqués (<iframe>) quelle que soit leur origine.

() (liste d'autorisations vide)

La fonctionnalité est désactivée dans les contextes de navigation principaux et imbriqués. L'équivalent pour l'attribut allow d'un <iframe> est 'none'.

self

La fonctionnalité sera autorisée dans ce document, ainsi que dans tous les contextes de navigation imbriqués (<iframe>) de même origine uniquement. La fonctionnalité n'est pas autorisée dans les documents d'origine croisée dans les contextes imbriqués. self peut être considéré comme un raccourci pour https://votre-site.exemple.com. L'équivalent pour l'attribut allow d'un <iframe> est self.

src

La fonctionnalité sera autorisée dans ce <iframe>, tant que le document chargé provient de la même origine que l'URL de son attribut src. Cette valeur n'est utilisée que dans l'attribut allow d'un <iframe>, et est la valeur par défaut de allowlist dans les <iframe>.

"<origin>"

La fonctionnalité est autorisée pour des origines spécifiques (par exemple, "https://a.exemple.com"). Les origines doivent être séparées par des espaces. Notez que les origines dans les attributs allow de <iframe> ne sont pas entre guillemets.

Les valeurs * et () ne peuvent être utilisées qu'isolément, tandis que self et src peuvent être utilisées en combinaison avec une ou plusieurs origines.

Note : Les directives ont une liste d'autorisations par défaut, qui est toujours l'une de *, self ou none pour l'en-tête HTTP Permissions-Policy, et détermine le comportement par défaut si elles ne sont pas explicitement listées dans une politique. Celles-ci sont précisées sur les différentes pages de référence des directives. Pour les attributs allow de <iframe>, le comportement par défaut est toujours src.

Lorsque cela est pris en charge, vous pouvez inclure des jokers dans les origines de la politique d'autorisations. Cela signifie qu'au lieu de devoir définir explicitement plusieurs sous-domaines différents dans une liste d'autorisations, vous pouvez tous les définir en une seule origine avec un joker.

Ainsi, au lieu de

http
("https://exemple.com" "https://a.exemple.com" "https://b.exemple.com" "https://c.exemple.com")

Vous pouvez définir

http
("https://exemple.com" "https://*.exemple.com")

Note : "https://*.exemple.com" ne correspond pas à "https://exemple.com".

Directives

accelerometer Expérimental

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.

ambient-light-sensor Expérimental

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.

aria-notify Expérimental Non standard

Contrôle si le document courant est autorisé à utiliser la méthode ariaNotify() pour déclencher des annonces pour lecteur d'écran.

attribution-reporting Obsolète

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

autoplay Expérimental

Contrôle si le document courant est autorisé à lire automatiquement des médias demandés via l'interface HTMLMediaElement. Lorsque cette politique est désactivée et qu'il n'y a pas eu de geste de la part de l'utilisateur·ice, la Promise retournée par HTMLMediaElement.play() sera rejetée avec une erreur NotAllowedError DOMException. L'attribut autoplay sur les éléments HTML <audio> et <video> sera ignoré.

bluetooth Expérimental

Contrôle si l'utilisation de l'API Web Bluetooth est autorisée. Lorsque cette politique est désactivée, les méthodes de l'objet Bluetooth retourné par Navigator.bluetooth retourneront soit false, soit rejeteront la Promise retournée avec une erreur SecurityError DOMException.

browsing-topics Obsolète Non standard

Contrôle l'accès à l'API Topics. Lorsqu'une politique interdit explicitement l'utilisation de l'API Topics, toute tentative d'appel à la méthode Document.browsingTopics() ou d'envoi d'une requête avec un en-tête Sec-Browsing-Topics échouera avec une erreur NotAllowedError DOMException.

camera Expérimental

Contrôle si le document courant est autorisé à utiliser des dispositifs d'entrée vidéo. La Promise retournée par getUserMedia() sera rejetée avec une erreur NotAllowedError DOMException si l'autorisation n'est pas accordée.

captured-surface-control Expérimental

Contrôle si le document est autorisé à utiliser l'API Captured Surface Control. La promesse retournée par les principales méthodes de l'API sera rejetée avec une erreur NotAllowedError DOMException si l'autorisation n'est pas accordée.

ch-ua-high-entropy-values Expérimental

Contrôle si le document est autorisé à utiliser la méthode NavigatorUAData.getHighEntropyValues() pour récupérer des données de user-agent à haute entropie. Si l'autorisation n'est pas accordée, la méthode ne retourne que les données à faible entropie brands, mobile et platform.

compute-pressure Expérimental

Contrôle l'accès à l'API Compute Pressure.

cross-origin-isolated Expérimental

Contrôle si le document courant peut être traité comme isolé d'origine croisée.

deferred-fetch Expérimental

Contrôle l'allocation du quota fetchLater() de l'origine principale.

deferred-fetch-minimal Expérimental

Contrôle l'allocation du quota partagé fetchLater() pour les sous-cadres inter-origines.

display-capture Expérimental

Contrôle si le document courant est autorisé à utiliser la méthode getDisplayMedia() pour capturer le contenu de l'écran. Lorsque cette politique est désactivée, la promesse retournée par getDisplayMedia() sera rejetée avec une erreur NotAllowedError DOMException si l'autorisation de capturer l'écran n'est pas obtenue.

encrypted-media Expérimental

Contrôle si le document courant est autorisé à utiliser l'API Encrypted Media Extensions (EME). Lorsque cette politique est désactivée, la Promise retournée par Navigator.requestMediaKeySystemAccess() sera rejetée avec une erreur SecurityError DOMException.

fullscreen Expérimental

Contrôle si le document courant est autorisé à utiliser Element.requestFullscreen(). Lorsque cette politique est désactivée, la Promise retournée est rejetée avec une TypeError.

gamepad Expérimental

Contrôle si le document courant est autorisé à utiliser l'API Gamepad. Lorsque cette politique est désactivée, les appels à Navigator.getGamepads() lèveront une SecurityError DOMException, et les évènements gamepadconnected et gamepaddisconnected ne seront pas déclenchés.

geolocation Expérimental

Contrôle si le document courant est autorisé à utiliser l'interface Geolocation. Lorsque cette politique est désactivée, les appels à getCurrentPosition() et watchPosition() provoqueront l'invocation des callbacks avec un code d'erreur GeolocationPositionError PERMISSION_DENIED.

gyroscope Expérimental

Contrôle si le document courant est autorisé à recueillir des informations sur l'orientation de l'appareil via l'interface Gyroscope.

hid Expérimental

Contrôle si le document courant est autorisé à utiliser l'API WebHID pour se connecter à des périphériques d'interface humaine peu courants ou exotiques, comme des claviers alternatifs ou des manettes.

identity-credentials-get Expérimental

Contrôle si le document courant est autorisé à utiliser l'API Federated Credential Management (FedCM).

idle-detection Expérimental

Contrôle si le document courant est autorisé à utiliser l'API Idle Detection pour détecter les interactions des utilisatrices et utilisateurs avec leurs appareils, par exemple pour indiquer l'état « disponible »/« absent » dans des applications de chat.

language-detector Expérimental

Contrôle l'accès à la fonctionnalité de détection de langue de l'API Translator and Language Detector.

local-fonts Expérimental

Contrôle si le document courant est autorisé à collecter des informations sur les polices installées localement via la méthode Window.queryLocalFonts() (voir aussi l'API Local Font Access).

magnetometer Expérimental

Contrôle si le document courant est autorisé à recueillir des informations sur l'orientation de l'appareil via l'interface Magnetometer.

microphone Expérimental

Contrôle si le document courant est autorisé à utiliser des dispositifs d'entrée audio. Lorsque cette politique est désactivée, la Promise retournée par MediaDevices.getUserMedia() sera rejetée avec une erreur NotAllowedError DOMException.

midi Expérimental

Contrôle si le document courant est autorisé à utiliser l'API Web MIDI. Lorsque cette politique est désactivée, la promesse (Promise) retournée par Navigator.requestMIDIAccess() sera rejetée avec une erreur SecurityError DOMException.

on-device-speech-recognition Expérimental

Contrôle l'accès à la fonctionnalité de reconnaissance vocale locale de l'API Web Speech.

otp-credentials Expérimental

Contrôle si le document courant est autorisé à utiliser l'API WebOTP pour demander un mot de passe à usage unique (OTP) depuis un SMS au format spécial envoyé par le serveur de l'application, via navigator.credentials.get({otp: ..., ...}).

payment Expérimental

Contrôle si le document courant est autorisé à utiliser l'API Payment Request. Lorsque cette politique est désactivée, le constructeur PaymentRequest() retournera une SecurityError DOMException.

picture-in-picture Expérimental

Contrôle si le document courant est autorisé à lire une vidéo en mode Image dans l'image via l'API correspondante.

private-state-token-issuance Expérimental

Contrôle l'utilisation des opérations de demande de jeton (token-request) de l'API Private State Token.

private-state-token-redemption Expérimental

Contrôle l'utilisation des opérations token-redemption et send-redemption-record de l'API Private State Token.

publickey-credentials-create Expérimental

Contrôle si le document courant est autorisé à utiliser l'API Web Authentication pour créer de nouvelles informations d'identification asymétriques, par exemple via navigator.credentials.create({publicKey: ..., ...}).

publickey-credentials-get Expérimental

Contrôle si le document courant est autorisé à utiliser l'API Web Authentication pour récupérer des informations d'identification par clé publique déjà stockées, par exemple via navigator.credentials.get({publicKey: ..., ...}).

screen-wake-lock Expérimental

Contrôle si le document courant est autorisé à utiliser l'API Screen Wake Lock pour indiquer que l'appareil ne doit pas s'éteindre ou diminuer la luminosité de l'écran.

serial Expérimental

Contrôle si le document courant est autorisé à utiliser l'API Web Serial pour communiquer avec des dispositifs série, soit connectés directement via un port série, soit via des dispositifs USB ou Bluetooth émulant un port série.

speaker-selection Expérimental

Contrôle si le document courant est autorisé à utiliser l'API Audio Output Devices pour lister et sélectionner des haut-parleurs.

storage-access Expérimental

Contrôle si un document chargé dans un contexte tiers (c.-à-d. intégré dans un <iframe>) est autorisé à utiliser l'API Storage Access pour demander l'accès aux cookies non partitionnés.

translator Expérimental

Contrôle l'accès à la fonctionnalité de traduction des API Translator and Language Detector.

summarizer Expérimental

Contrôle l'accès à l'API Summarizer.

usb Expérimental

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

web-share Expérimental

Contrôle si le document courant est autorisé à utiliser Navigator.share() de l'API Web Share pour partager du texte, des liens, des images et d'autres contenus vers des destinations arbitraires choisies par l'utilisateur·ice (par exemple, des applications mobiles).

window-management Expérimental

Contrôle si le document courant est autorisé à utiliser l'API Window Management pour gérer des fenêtres sur plusieurs écrans.

xr-spatial-tracking Expérimental

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

Exemples

Utilisation simple

En-tête Permissions-Policy

Pour autoriser tous les domaines à accéder à la géolocalisation :

http
Permissions-Policy: geolocation=*

Pour autoriser l'accès à une partie des domaines :

http
Permissions-Policy: geolocation=(self "https://a.exemple.com" "https://b.exemple.com")

Plusieurs fonctionnalités peuvent être contrôlées en même temps en envoyant l'en-tête avec une liste de politiques séparées par des virgules, ou en envoyant un en-tête distinct pour chaque politique.

Par exemple, les exemples suivants sont équivalents :

http
Permissions-Policy: picture-in-picture=(), geolocation=(self https://exemple.com/), camera=*

Permissions-Policy: picture-in-picture=()
Permissions-Policy: geolocation=(self https://exemple.com/)
Permissions-Policy: camera=*

Cadres intégrés

Pour qu'une fonctionnalité soit activée dans un <iframe>, son domaine autorisé doit aussi être présent dans la liste d'autorisation de la page parente. En raison de ce comportement d'héritage, il est conseillé de définir le support le plus large possible pour une fonctionnalité dans l'en-tête HTTP, puis de définir le sous-ensemble de support nécessaire dans chaque <iframe>.

Pour autoriser tous les domaines à accéder à la géolocalisation :

html
<iframe src="https://exemple.com" allow="geolocation *"></iframe>

Pour appliquer une politique au domaine courant et à d'autres :

html
<iframe
  src="https://exemple.com"
  allow="geolocation 'self' https://a.exemple.com https://b.exemple.com"></iframe>

Important : Par défaut, si un <iframe> navigue vers un autre domaine, la politique n'est pas appliquée au domaine vers lequel l'<iframe> navigue. En listant le domaine cible dans l'attribut allow, la politique de permissions appliquée à l'<iframe> d'origine sera appliquée au domaine cible.

Plusieurs fonctionnalités peuvent être contrôlées en même temps en incluant une liste de directives de politique séparées par des points-virgules dans l'attribut allow.

html
<iframe
  src="https://exemple.com"
  allow="geolocation 'self' https://a.exemple.com https://b.exemple.com; fullscreen 'none'"></iframe>

Il est utile de mentionner la valeur src. Comme indiqué plus haut, utiliser cette valeur dans la liste d'autorisation signifie que la fonctionnalité associée sera autorisée dans cet <iframe>, tant que le document chargé provient du même domaine que l'URL dans son attribut src. Cette valeur est le valeur par défaut de la liste d'autorisation pour les fonctionnalités listées dans allow, donc les exemples suivants sont équivalents :

html
<iframe src="https://exemple.com" allow="geolocation 'src'"></iframe>
<iframe src="https://exemple.com" allow="geolocation"></iframe>

Refuser l'accès aux fonctionnalités puissantes

La société SecureCorp Inc. souhaite désactiver les API Microphone (par exemple MediaDevices.getUserMedia()) et Geolocation dans son application. Elle peut le faire en utilisant l'en-tête de réponse suivant :

http
Permissions-Policy: microphone=(), geolocation=()

En définissant () pour la liste des domaines, les fonctionnalités indiquées seront désactivées pour tous les contextes de navigation (y compris tous les <iframe>), quel que soit leur domaine.

Combiner l'en-tête HTTP et les politiques de <iframe>

Par exemple, supposons que vous souhaitez activer la géolocalisation sur votre propre domaine, ainsi que dans du contenu embarqué provenant de votre réseau publicitaire de confiance. Vous pouvez définir la politique de permissions globale de la page ainsi :

http
Permissions-Policy: geolocation=(self https://trusted-ad-network.com)

Dans vos <iframe> publicitaires, vous pouvez autoriser l'accès au domaine https://trusted-ad-network.com ainsi :

html
<iframe src="https://trusted-ad-network.com" allow="geolocation"></iframe>

Si un autre domaine est chargé dans l'<iframe>, il n'aura pas accès à la géolocalisation :

html
<iframe src="https://rogue-origin-exemple.com" allow="geolocation"></iframe>

Spécifications

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

Compatibilité des navigateurs

Voir aussi