Sec-CH-Prefers-Color-Scheme 标头
HTTP Sec-CH-Prefers-Color-Scheme 请求标头是一个媒体特性客户端提示,它提供用户对浅色或深色主题的偏好。用户通过操作系统设置(例如,浅色或深色模式)或用户代理设置来表明他们的偏好。
如果服务器通过 Accept-CH 标头向客户端发出信号,表明它接受 Sec-CH-Prefers-Color-Scheme,则客户端可以随后通过此标头响应,以表明用户对特定颜色方案的偏好。服务器可以发送经过适当调整的内容(包括图像或 CSS)给客户端,以便为后续渲染的内容显示浅色或深色模式。
此标头是根据 prefers-color-scheme 媒体查询建模的。
用法说明
Sec-CH-Prefers-Color-Scheme 标头允许网站在请求时获取用户颜色方案偏好;然后,出于性能原因,它们可以选择内联提供与用户偏好相关的 CSS。如果服务器内联 CSS,它可能希望包含一个 Vary 响应标头,指定 Sec-CH-Prefers-Color-Scheme,以表明响应是为特定颜色方案定制的。
如果在此上下文中性能不是关键考虑因素,你可以转而使用 prefers-color-scheme 媒体查询和/或 Window.matchMedia() API 来处理用户的颜色方案偏好。
Sec-CH-Prefers-Color-Scheme 是一个高熵提示,因此网站需要通过发送适当的 Accept-CH 响应标头来选择接收它。用户代理可能会有意省略 Sec-CH-Prefers-Color-Scheme 标头以保护用户隐私,因为理论上用户的偏好可能被用于指纹识别。
语法
Sec-CH-Prefers-Color-Scheme: <preference>
指令
<preference>-
一个字符串,指示用户代理对深色或浅色内容的偏好:“
"light"”或“"dark"”。该值可能源自底层操作系统中的相应设置。
示例
使用 Sec-CH-Prefers-Color-Scheme
客户端向服务器发出初始请求
GET / HTTP/1.1
Host: example.com
服务器响应,通过 Accept-CH 告知客户端它接受 Sec-CH-Prefers-Color-Scheme。在此示例中,还使用了 Critical-CH,表明 Sec-CH-Prefers-Color-Scheme 被视为关键客户端提示。
HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Sec-CH-Prefers-Color-Scheme
Vary: Sec-CH-Prefers-Color-Scheme
Critical-CH: Sec-CH-Prefers-Color-Scheme
注意: 我们还在 Vary 标头中指定了 Sec-CH-Prefers-Color-Scheme,以表明响应应该根据此标头的值单独缓存(即使 URL 保持不变)。Critical-CH 标头中列出的每个标头也应存在于 Accept-CH 和 Vary 标头中。
客户端自动重试请求(由于上面指定了 Critical-CH),通过 Sec-CH-Prefers-Color-Scheme 告知服务器它对深色内容有用户偏好
GET / HTTP/1.1
Host: example.com
Sec-CH-Prefers-Color-Scheme: "dark"
客户端将在当前会话的后续请求中包含此标头,除非响应中的 Accept-CH 发生变化,表明服务器不再支持它。
规范
| 规范 |
|---|
| 用户偏好媒体特性客户端提示标头 # sec-ch-prefers-color-scheme |
浏览器兼容性
加载中…
另见
- 客户端提示
- 用户代理客户端提示 API
Accept-CH- HTTP 缓存可变响应和
Vary标头 prefers-color-schemeCSS 媒体查询- 通过用户代理客户端提示改善用户隐私和开发者体验 (developer.chrome.com)