Permissions-Policy header

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

Tiêu đề HTTP Permissions-Policy response header cung cấp cơ chế để cho phép và từ chối sử dụng các tính năng của trình duyệt trong tài liệu hoặc trong bất kỳ phần tử <iframe> nào trong tài liệu.

Để biết thêm thông tin, xem bài viết chính về Chính sách quyền hạn.

Loại tiêu đề Response header

Cú pháp

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

Chỉ thị Chính sách quyền hạn để áp dụng allowlist. Xem Chỉ thị bên dưới để biết danh sách tên chỉ thị được phép.

<allowlist>

Danh sách cho phép là danh sách các nguồn gốc nhận một hoặc nhiều giá trị sau được chứa trong dấu ngoặc đơn, phân tách bằng dấu cách:

* (ký tự đại diện)

Tính năng sẽ được phép trong tài liệu này và tất cả các ngữ cảnh duyệt web lồng nhau (<iframe>) bất kể nguồn gốc của chúng.

() (danh sách cho phép trống)

Tính năng bị tắt trong các ngữ cảnh duyệt web cấp cao nhất và lồng nhau. Tương đương cho thuộc tính allow <iframe>'none'.

self

Tính năng sẽ được phép trong tài liệu này và trong tất cả các ngữ cảnh duyệt web lồng nhau (<iframe>) chỉ trong cùng nguồn gốc. Tính năng không được phép trong các tài liệu khác nguồn gốc trong các ngữ cảnh duyệt web lồng nhau. self có thể được coi là viết tắt cho https://your-site.example.com. Tương đương cho thuộc tính allow <iframe>self.

src

Tính năng sẽ được phép trong <iframe> này, miễn là tài liệu được tải vào nó đến từ cùng nguồn gốc với URL trong thuộc tính src của nó. Giá trị này chỉ được sử dụng trong thuộc tính allow <iframe>, và là giá trị allowlist mặc định trong <iframe>.

"<origin>"

Tính năng được phép cho các nguồn gốc cụ thể (ví dụ: "https://a.example.com"). Các nguồn gốc nên được phân tách bằng dấu cách. Lưu ý rằng các nguồn gốc trong thuộc tính allow <iframe> không được trích dẫn.

Các giá trị *() chỉ có thể được sử dụng một mình, trong khi selfsrc có thể được sử dụng kết hợp với một hoặc nhiều nguồn gốc.

Note: Các chỉ thị có danh sách cho phép mặc định, luôn là một trong *, self hoặc none cho tiêu đề HTTP Permissions-Policy, và điều chỉnh hành vi mặc định nếu chúng không được liệt kê rõ ràng trong chính sách. Những điều này được chỉ định trên các trang tham chiếu chỉ thị riêng lẻ. Đối với thuộc tính allow <iframe>, hành vi mặc định luôn là src.

Khi được hỗ trợ, bạn có thể bao gồm ký tự đại diện trong các nguồn gốc Chính sách quyền hạn. Điều này có nghĩa là thay vì phải chỉ định rõ ràng nhiều tên miền con khác nhau trong danh sách cho phép, bạn có thể chỉ định tất cả trong một nguồn gốc với ký tự đại diện.

Vì vậy, thay vì

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

Bạn có thể chỉ định

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

Note: "https://*.example.com" không khớp "https://example.com".

Chỉ thị

accelerometer Experimental

Kiểm soát xem tài liệu hiện tại có được phép thu thập thông tin về gia tốc của thiết bị thông qua giao diện Accelerometer hay không.

ambient-light-sensor Experimental

Kiểm soát xem tài liệu hiện tại có được phép thu thập thông tin về lượng ánh sáng trong môi trường xung quanh thiết bị thông qua giao diện AmbientLightSensor hay không.

aria-notify Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng phương thức ariaNotify() để kích hoạt thông báo screen reader hay không.

attribution-reporting Deprecated

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Attribution Reporting API hay không.

autoplay Experimental

Kiểm soát xem tài liệu hiện tại có được phép tự động phát phương tiện được yêu cầu thông qua giao diện HTMLMediaElement hay không.

bluetooth Experimental

Kiểm soát xem việc sử dụng Web Bluetooth API có được phép hay không.

browsing-topics Deprecated Non-standard

Kiểm soát quyền truy cập vào Topics API.

camera Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng thiết bị đầu vào video hay không.

captured-surface-control Experimental

Kiểm soát xem tài liệu có được phép sử dụng Captured Surface Control API hay không.

ch-ua-high-entropy-values Experimental

Kiểm soát xem tài liệu có được phép sử dụng phương thức NavigatorUAData.getHighEntropyValues() để lấy dữ liệu tác nhân người dùng entropy cao hay không.

compute-pressure Experimental

Kiểm soát quyền truy cập vào Compute Pressure API.

cross-origin-isolated Experimental

Kiểm soát xem tài liệu hiện tại có thể được coi là cách ly khác nguồn gốc hay không.

deferred-fetch Experimental

Kiểm soát việc phân bổ hạn ngạch fetchLater() của nguồn gốc cấp cao nhất.

deferred-fetch-minimal Experimental

Kiểm soát việc phân bổ hạn ngạch fetchLater() được chia sẻ khung con khác nguồn gốc.

display-capture Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng phương thức getDisplayMedia() để chụp nội dung màn hình hay không.

encrypted-media Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Encrypted Media Extensions API (EME) hay không.

fullscreen Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Element.requestFullscreen() hay không.

gamepad Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Gamepad API hay không.

geolocation Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng giao diện Geolocation hay không.

gyroscope Experimental

Kiểm soát xem tài liệu hiện tại có được phép thu thập thông tin về hướng của thiết bị thông qua giao diện Gyroscope hay không.

hid Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng WebHID API để kết nối với các thiết bị giao diện người dùng không phổ biến hay không.

identity-credentials-get Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Federated Credential Management API (FedCM) hay không.

idle-detection Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Idle Detection API để phát hiện khi người dùng đang tương tác với thiết bị của họ hay không.

language-detector Experimental

Kiểm soát quyền truy cập vào chức năng phát hiện ngôn ngữ của Translator and Language Detector APIs.

local-fonts Experimental

Kiểm soát xem tài liệu hiện tại có được phép thu thập dữ liệu về phông chữ cục bộ đã cài đặt của người dùng thông qua phương thức Window.queryLocalFonts() hay không.

magnetometer Experimental

Kiểm soát xem tài liệu hiện tại có được phép thu thập thông tin về hướng của thiết bị thông qua giao diện Magnetometer hay không.

microphone Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng thiết bị đầu vào âm thanh hay không.

midi Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Web MIDI API hay không.

on-device-speech-recognition Experimental

Kiểm soát quyền truy cập vào chức năng nhận dạng giọng nói trên thiết bị của Web Speech API.

otp-credentials Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng WebOTP API để yêu cầu mật khẩu một lần (OTP) hay không.

payment Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Payment Request API hay không.

picture-in-picture Experimental

Kiểm soát xem tài liệu hiện tại có được phép phát video ở chế độ Picture-in-Picture thông qua API tương ứng hay không.

private-state-token-issuance Experimental

Kiểm soát việc sử dụng các thao tác private state token token-request.

private-state-token-redemption Experimental

Kiểm soát việc sử dụng các thao tác private state token token-redemptionsend-redemption-record.

publickey-credentials-create Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Web Authentication API để tạo thông tin xác thực khóa bất đối xứng mới hay không.

publickey-credentials-get Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Web Authentication API để lấy thông tin xác thực khóa công khai đã lưu hay không.

screen-wake-lock Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Screen Wake Lock API để chỉ báo rằng thiết bị không nên tắt hoặc làm mờ màn hình hay không.

serial Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Web Serial API để giao tiếp với các thiết bị nối tiếp hay không.

speaker-selection Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Audio Output Devices API để liệt kê và chọn loa hay không.

storage-access Experimental

Kiểm soát xem tài liệu được tải trong ngữ cảnh bên thứ ba (tức là nhúng trong <iframe>) có được phép sử dụng Storage Access API để yêu cầu quyền truy cập vào cookie không được phân vùng hay không.

translator Experimental

Kiểm soát quyền truy cập vào chức năng dịch thuật của Translator and Language Detector APIs.

summarizer Experimental

Kiểm soát quyền truy cập vào Summarizer API.

usb Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng WebUSB API hay không.

web-share Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Navigator.share() của Web Share API để chia sẻ văn bản, liên kết, hình ảnh và nội dung khác hay không.

window-management Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng Window Management API để quản lý cửa sổ trên nhiều màn hình hay không.

xr-spatial-tracking Experimental

Kiểm soát xem tài liệu hiện tại có được phép sử dụng WebXR Device API để tương tác với phiên WebXR hay không.

Ví dụ

Sử dụng cơ bản

Tiêu đề Permissions-Policy

Để cho phép tất cả các nguồn gốc truy cập vào định vị địa lý, bạn làm điều này:

http
Permissions-Policy: geolocation=*

Hoặc để cho phép truy cập cho một tập hợp con các nguồn gốc, bạn làm điều này:

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

Một số tính năng có thể được kiểm soát đồng thời bằng cách gửi tiêu đề với danh sách chính sách phân tách bằng dấu phẩy, hoặc bằng cách gửi tiêu đề riêng cho mỗi chính sách.

Ví dụ: sau đây là tương đương:

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

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

iframe

Để <iframe> có tính năng được bật, nguồn gốc được phép của nó cũng phải có trong danh sách cho phép của trang cha. Do hành vi kế thừa này, nên chỉ định hỗ trợ rộng nhất có thể chấp nhận cho một tính năng trong tiêu đề HTTP, sau đó chỉ định tập con hỗ trợ bạn cần trong mỗi <iframe>.

Để cho phép tất cả các nguồn gốc truy cập vào định vị địa lý, bạn làm điều này:

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

Để áp dụng chính sách cho nguồn gốc hiện tại và các nguồn gốc khác, bạn làm điều này:

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

Từ chối quyền truy cập vào các tính năng mạnh

SecureCorp Inc. muốn tắt Microphone (ví dụ: MediaDevices.getUserMedia()) và Geolocation APIs trong ứng dụng của mình. Họ có thể làm điều đó bằng tiêu đề phản hồi sau:

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

Bằng cách chỉ định () cho danh sách nguồn gốc, các tính năng được chỉ định sẽ bị vô hiệu hóa cho tất cả các ngữ cảnh duyệt web (bao gồm tất cả <iframe>), bất kể nguồn gốc của chúng.

Kết hợp tiêu đề HTTP và chính sách <iframe>

Ví dụ: giả sử chúng ta muốn bật sử dụng định vị địa lý trên nguồn gốc của chúng ta, và trong nội dung nhúng đến từ mạng quảng cáo đáng tin cậy của chúng ta. Chúng ta có thể thiết lập Chính sách quyền hạn toàn trang như sau:

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

Trong các <iframe> quảng cáo của chúng ta, chúng ta có thể đặt quyền truy cập vào nguồn gốc https://trusted-ad-network.com như sau:

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

Đặc tả

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

Khả năng tương thích trình duyệt

Xem thêm