一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。
User-Agent Client Hints 是一组 HTTP header,它是获取 User-Agent 信息的一系列 API。
我们打开一个网络请求,在 HTTP 请求中可以看到 user-agent 信息:
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36
这个信息会通过 HTTP request 传递给 server,我们从 server 上可以获取用户使用的浏览器信息。
但是事实上这个 user-agent 是极其不准确的。我们都知道由于历史原因,早期浏览器在 UA 中添加了非常多的欺骗信息,我们需要经过复杂的解析才能从 UA 中提取出有效信息,因此衍生出一系列 UA 处理的库,这个过程很难受。而时至今日,UA 前面添加的一系列无效字符已经没有太大的作用的,反过来为了兼容应用开发者的逻辑,这个别扭的 UA 体系还需要一直存在。
因为不能删除,浏览器直接推出了一套更好用的机制,这就是本文介绍的 Client Hints。我们使用实现了 Client Hints 的浏览器访问网站,可以在 Header 中看到相关的内容:
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "macOS"
浏览器默认会发送 sec-ch-ua、sec-ch-ua-mobile 和 sec-ch-ua-platform 三个 header,相比较于之前的 user-agent,这部分内容看起来会友好很多,这部分信息更精准且实用。
另外除了默认三个,服务器还可以通过 Accept-CH 向客户端请求更多的 sec-ch-* 内容,浏览器收到 Accept-CH 后,下次请求服务器可以携带更多 ua 信息,详细的定义可以参考文档介绍。User-Agent Client Hints 在监控或埋点等需要用户信息的场景很方便。