HTTP 客戶端提示
客戶端提示是一組HTTP 請求頭欄位,伺服器可以透過這些欄位主動向客戶端請求有關裝置、網路、使用者和特定於使用者代理的偏好的資訊。伺服器可以根據客戶端選擇提供的資訊來確定要傳送的資源。
概述
伺服器必須宣佈它支援客戶端提示,使用Accept-CH頭指定它感興趣接收的提示。當支援客戶端提示的客戶端收到Accept-CH頭時,它可以選擇在其後續請求中附加一些或所有列出的客戶端提示頭。
例如,在下面的響應中,客戶端可以在Accept-CH之後將Width、Downlink和Sec-CH-UA頭附加到所有後續請求中。
Accept-CH: Width, Downlink, Sec-CH-UA
這種方法效率很高,因為伺服器只請求它能夠有效處理的資訊。它也相對“保護隱私”,因為客戶端可以決定可以安全共享哪些資訊。
有一小部分低熵客戶端提示頭,即使未被請求,也可能由客戶端傳送。
注意:客戶端提示也可以在 HTML 中使用帶有http-equiv屬性的<meta>元素來指定。
<meta http-equiv="Accept-CH" content="Width, Downlink, Sec-CH-UA" />
快取和客戶端提示
確定響應中傳送哪些資源的客戶端提示通常也應包含在受影響響應的Vary頭中。這確保了為提示頭的每個不同值快取不同的資源。
Vary: Accept, Width, ECT
如果提示頭的值變化很大,您可能更傾向於省略指定Vary或使用其他策略,因為這實際上會使資源無法快取。(為每個唯一值建立一個新的快取條目。)這尤其適用於網路客戶端提示,如Downlink和RTT。有關更多資訊,請參閱HTTP 快取 > Vary。
提示生命週期
伺服器在Accept-CH響應頭中指定它感興趣獲取的客戶端提示頭。使用者代理將請求的客戶端提示頭(或至少它希望與該伺服器共享的子集)附加到當前瀏覽器會話中的所有後續請求中。
換句話說,對特定提示集的請求不會過期,直到瀏覽器關閉。
伺服器可以透過使用新的列表重新發送Accept-CH響應頭來替換它感興趣接收的客戶端提示集。例如,要停止請求任何提示,它會發送一個包含空列表的Accept-CH。
注意:透過為特定來源內的 URL 傳送Clear-Site-Data: "clientHints"響應頭,也可以清除為該來源設定的客戶端提示。
低熵提示
客戶端提示大致分為高熵提示和低熵提示。
低熵提示是指不會洩露太多可能用於建立使用者指紋的資訊的提示。它們可能會在每個客戶端請求時預設傳送,而不管伺服器的Accept-CH響應頭如何,具體取決於許可權策略。這些提示包括:Save-Data、Sec-CH-UA、Sec-CH-UA-Mobile、Sec-CH-UA-Platform。
高熵提示是指有可能洩露更多可用於使用者指紋的資訊的提示,因此,它們以使用者代理可以決定是否提供它們的方式進行限制。該決定可能基於使用者偏好、許可權請求或許可權策略。所有不是低熵提示的客戶端提示都被視為高熵提示。
關鍵客戶端提示
關鍵客戶端提示是指應用響應可能會顯著改變渲染頁面,可能以令人不快的方式或會影響可用性的方式,因此必須在內容渲染之前應用。例如,Sec-CH-Prefers-Reduced-Motion通常被視為關鍵提示,因為它可能會顯著影響動畫的行為,並且因為選擇此偏好的使用者需要設定它。
伺服器可以使用Critical-CH響應頭以及Accept-CH來指定接受的客戶端提示也是關鍵客戶端提示(Critical-CH中的頭也必須出現在Accept-CH中)。收到帶有Critical-CH的響應的使用者代理必須檢查原始請求中是否傳送了指示的關鍵頭。如果不是,則使用者代理將重試請求而不是渲染頁面。這種方法確保始終使用使用關鍵客戶端提示設定的使用者偏好,即使未包含在第一個請求中,或伺服器配置發生更改。
例如,在本例中,伺服器透過Accept-CH告訴客戶端它接受Sec-CH-Prefers-Reduced-Motion,並且使用Critical-CH指定Sec-CH-Prefers-Reduced-Motion被視為關鍵客戶端提示
HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Sec-CH-Prefers-Reduced-Motion
Vary: Sec-CH-Prefers-Reduced-Motion
Critical-CH: Sec-CH-Prefers-Reduced-Motion
注意:我們還在Vary頭中指定了Sec-CH-Prefers-Reduced-Motion,以指示瀏覽器根據此頭值提供的內容將有所不同,即使 URL 保持不變,因此瀏覽器不應僅使用現有的快取響應,而應分別快取此響應。Critical-CH頭中列出的每個頭也應存在於Accept-CH和Vary頭中。
由於Sec-CH-Prefers-Reduced-Motion是一個原始請求中不存在的關鍵提示,因此客戶端會自動重試請求——這次透過Sec-CH-Prefers-Reduced-Motion告訴伺服器它對減少運動動畫的使用者偏好。
GET / HTTP/1.1
Host: example.com
Sec-CH-Prefers-Reduced-Motion: "reduce"
提示型別
使用者代理客戶端提示
使用者代理 (UA) 客戶端提示頭允許伺服器根據使用者代理(瀏覽器)、作業系統和裝置來改變響應。有關Sec-CH-UA-*頭的列表,請參閱使用者代理客戶端提示頭。
客戶端提示可透過使用者代理客戶端提示 API供網頁 JavaScript 使用。
注意:伺服器目前透過解析User-Agent頭獲得大部分相同的資訊。出於歷史原因,此頭包含大量基本上無關的資訊,以及可能用於識別特定使用者的資訊。UA 客戶端提示提供了一種更有效且更能保護隱私的方式來獲取所需的資訊。最終預計它們將取代這種舊方法。
使用者偏好媒體特徵客戶端提示
使用者偏好媒體特徵客戶端提示允許伺服器根據使用者代理對CSS 媒體特徵(如顏色方案或減少運動)的偏好來改變響應。頭包括:Sec-CH-Prefers-Reduced-Motion、Sec-CH-Prefers-Color-Scheme。
裝置客戶端提示
裝置客戶端提示允許伺服器根據裝置特性(包括可用記憶體和螢幕屬性)來改變響應。頭包括:Device-Memory、Width、Viewport-Width。
網路客戶端提示
另請參閱
- 客戶端提示頭
VaryHTTP 頭- 客戶端提示基礎設施
- 使用者代理客戶端提示 API
- 使用使用者代理客戶端提示改進使用者隱私和開發者體驗 (developer.chrome.com)