User-Agent Client Hints và việc rút gọn UA
Các trình duyệt dựa trên Chromium gửi chuỗi User-Agent đã rút gọn: những chi tiết nhận diện thiết bị chính xác nhất bị đóng băng thành giá trị cố định, còn dữ liệu chính xác được chuyển sang User-Agent Client Hints (UA-CH), thứ mà trang web phải yêu cầu mới nhận được. Hướng dẫn này phân tích một chuỗi Chrome trên Android kiểu cũ đặt cạnh một chuỗi đã rút gọn.
Ví dụ minh họa
Mozilla/5.0 (Linux; Android 12; SM-G991B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.88 Mobile Safari/537.36
- Trình duyệt
- Chrome 99.0.4844.88
- Engine
- Blink
- Hệ điều hành
- Android 12
- Loại thiết bị
- Di động
- Thiết bị
- Samsung SM-G991B
- Kiến trúc CPU
- Không rõ
- Bot / crawler
- Không
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36
- Trình duyệt
- Chrome 120.0.0.0
- Engine
- Blink
- Hệ điều hành
- Android 10
- Loại thiết bị
- Di động
- Thiết bị
- K
- Kiến trúc CPU
- Không rõ
- Bot / crawler
- Không
Chuỗi kiểu cũ để lộ Android 12, model Samsung SM-G991B và phiên bản đầy đủ 99.0.4844.88. Trong chuỗi rút gọn, Android 10 và model K là giá trị giữ chỗ mà mọi thiết bị Android đều gửi, và phiên bản kết thúc bằng .0.0.0. Trình phân tích báo cáo đúng những gì chuỗi ghi — Android 10, model K — nên chỉ phiên bản chính 120 và token Mobile còn mang thông tin thực.
Sec-CH-UA: "Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120" Sec-CH-UA-Mobile: ?1 Sec-CH-UA-Platform: "Android" Accept-CH: Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List
Quy tắc chính
- Chuỗi Chrome rút gọn chỉ giữ phiên bản chính; minor, build và patch luôn là 0.0.0.
- Trên Android, phiên bản hệ điều hành cố định ở 10 và model thiết bị được thay bằng K. Trên máy tính, nền tảng bị đóng băng thành các giá trị như Windows NT 10.0; Win64; x64, Macintosh; Intel Mac OS X 10_15_7 hoặc X11; Linux x86_64.
- Qua HTTPS, trình duyệt Chromium mặc định gửi ba hint low-entropy: Sec-CH-UA (thương hiệu và phiên bản chính), Sec-CH-UA-Mobile và Sec-CH-UA-Platform.
- Các hint chi tiết như Sec-CH-UA-Platform-Version, Sec-CH-UA-Model và Sec-CH-UA-Full-Version-List chỉ được gửi sau khi máy chủ yêu cầu chúng trong header phản hồi Accept-CH. Trong JavaScript, hãy dùng navigator.userAgentData.getHighEntropyValues().
- Danh sách thương hiệu có một mục “GREASE” cố ý làm giả, chẳng hạn “Not_A Brand”. Hãy tìm thương hiệu bạn cần thay vì so sánh toàn bộ header.
- Windows 11 vẫn gửi Windows NT 10.0 trong chuỗi User-Agent; Sec-CH-UA-Platform-Version từ 13.0.0 trở lên cho biết đó là Windows 11.
- Client hints là tính năng của Chromium, vì vậy hãy giữ phương án dự phòng dựa trên User-Agent cho các trình duyệt khác. Trình phân tích này chỉ đọc chuỗi User-Agent, không đọc client hints.