Khi phát triển web, đôi khi chúng ta cần hiển thị giao diện khác nhau tùy theo loại trình duyệt web hoặc hệ điều hành, hoặc cần thống kê nền tảng mà người truy cập đang sử dụng. Một trong những thứ được dùng trong trường hợp này chính là chuỗi [User Agent](User Agent) mà trình duyệt web thêm vào header yêu cầu HTTP. Cách phân biệt nền tảng và trình duyệt thông qua chuỗi này tuy được dùng rất rộng rãi, nhưng bản thân chuỗi này từ thời Netscape đã trở nên rối rắm và khó hiểu vì những lý do như tính tương thích. Đến bây giờ thì càng khỏi phải nói, gần như mọi trình duyệt đều đang giả vờ mình là một trình duyệt khác. Ví dụ, chuỗi User-Agent của một trình duyệt mà tôi đang dùng như sau.
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4003.0 Safari/537.36 Edg/81.0.381.0
Nếu không có kiến thức nền nào khác mà chỉ có chuỗi User-Agent này, có lẽ sẽ không thể biết rốt cuộc đây là trình duyệt gì. Mozilla Firefox? Chrome? Safari? Edge? Đáp án là Microsoft Edge bản Dev. Nền tảng sử dụng thì có vẻ vẫn còn phân biệt được phần nào, nhưng nếu phải parse chuỗi này để nhận diện nền tảng thì cũng sẽ lại rất đau đầu.
Để giải quyết vấn đề này, Google đã đề xuất từng bước ngừng sử dụng chuỗi User-Agent, và thay vào đó dùng [Client Hints](Client Hints). Client Hints ở đây có nghĩa là tách thông tin hiện đang được biểu diễn trong chuỗi User-Agent thành 7 trường (tên trình duyệt/phiên bản major của trình duyệt/phiên bản đầy đủ của trình duyệt/tên và phiên bản nền tảng/kiến trúc nền tảng/tên mẫu phần cứng/có phải thiết bị di động hay không) rồi thêm chúng vào header yêu cầu HTTP.
Google cho biết trong năm nay (2020), họ dự định cố định chuỗi User-Agent của Google Chrome để nó không còn thay đổi nữa (không thể loại bỏ hoàn toàn vì vấn đề tương thích), đồng thời bắt đầu sử dụng Client Hints này. Có vẻ như các hãng phát triển trình duyệt lớn khác như Mozilla, Apple, MS cũng có kế hoạch hỗ trợ, nhưng chi tiết cụ thể thì vẫn chưa được công bố. Nếu các trình duyệt khác cũng bắt đầu dùng cách này thì có lẽ việc phổ cập sẽ không gặp trở ngại lớn. Tuy vậy, nhìn vào cách Google đang phân biệt đối xử với những dịch vụ không chạy trên trình duyệt của họ, cũng khó mà có thể hoàn toàn dang tay chào đón đề xuất này.
Nội dung đề xuất Client Hints của Google:
https://wicg.github.io/ua-client-hints/
Lịch sử của chuỗi User-Agent:
Chưa có bình luận nào.