Phân tích chuỗi User Agent: đọc được gì, không đọc được gì và vì sao không nên tin tuyệt đối
Công cụ tự điền chuỗi User Agent của chính trình duyệt bạn đang dùng rồi tách ra tên trình duyệt, phiên bản, hệ điều hành, loại thiết bị và nhân dựng trang. Bạn cũng dán được chuỗi lấy từ nhật ký máy chủ để phân tích. Toàn bộ việc so khớp chạy bằng biểu thức chính quy ngay trong trình duyệt, không gửi dữ liệu đi đâu.
Tính năng nổi bật
- Tự lấy và điền sẵn chuỗi User Agent của trình duyệt đang mở, không cần gõ lại
- Dán được chuỗi bất kỳ lấy từ nhật ký máy chủ hoặc từ công cụ khác để phân tích
- Nhận diện Chrome, Edge, Firefox và Safari cùng số phiên bản chính
- Nhận diện Windows, macOS, Android, iOS và Linux kèm phiên bản khi chuỗi có ghi
- Phân loại thiết bị thành máy tính, điện thoại hoặc máy tính bảng
- Nhận ra nhà sản xuất Apple và Samsung cùng dòng máy iPhone hay iPad
- Đánh dấu chuỗi có dấu hiệu của trình thu thập tự động, tách riêng Googlebot và Bingbot
- Nút sao chép để lấy nguyên chuỗi mang sang công cụ kiểm thử hoặc phiếu báo lỗi
Khi nào bạn thực sự cần đọc chuỗi User Agent
Tình huống thường gặp nhất là xử lý một báo lỗi mà người dùng chỉ mô tả được là trang bị vỡ trên máy của họ. Câu hỏi đầu tiên bạn cần trả lời là họ dùng trình duyệt nào, phiên bản bao nhiêu, hệ điều hành gì, và cách nhanh nhất là bảo họ mở trang này rồi gửi lại nội dung ô đầu tiên. Tình huống thứ hai là đọc nhật ký máy chủ: khi thấy một địa chỉ IP gọi liên tục vào website, chuỗi User Agent là manh mối đầu tiên để đoán đó là trình thu thập của công cụ tìm kiếm, một công cụ giám sát hay một chương trình quét tự động. Tình huống thứ ba là kiểm thử: bạn muốn xác nhận chuỗi mà trình duyệt gửi đi khớp với thứ máy chủ đang thấy, hoặc kiểm tra xem một tiện ích thay đổi User Agent có hoạt động không. Cả ba tình huống đều cần đọc nhanh, và việc tách chuỗi bằng mắt thì rất mệt vì cấu trúc của nó vốn lộn xộn do lịch sử để lại.
Lợi ích khi sử dụng
- Biết ngay môi trường của người báo lỗi mà không phải hỏi qua lại nhiều lượt
- Đọc nhật ký máy chủ nhanh hơn nhờ tách sẵn từng thành phần
- Xác nhận được tiện ích đổi User Agent có thực sự thay đổi chuỗi gửi đi hay không
- Không cần cài đặt gì, mở trang là có ngay chuỗi của máy hiện tại
- Chuỗi không rời khỏi trình duyệt nên dùng được với nhật ký nội bộ
Cách phân tích một chuỗi User Agent
- 1Mở trang, chuỗi User Agent của trình duyệt bạn đang dùng được điền sẵn vào ô nhập.
- 2Nếu muốn phân tích chuỗi khác, xóa nội dung đó rồi dán chuỗi cần xem vào.
- 3Đọc kết quả bên dưới, kết quả cập nhật ngay mỗi lần nội dung ô thay đổi.
- 4Đối chiếu nhãn loại thiết bị với thực tế, nhất là khi chuỗi đến từ iPad hoặc từ trình duyệt hiếm gặp.
- 5Bấm sao chép nếu cần gửi nguyên chuỗi vào phiếu báo lỗi hoặc dán sang môi trường kiểm thử.
Vì sao chuỗi User Agent lại lộn xộn đến vậy
Nhìn một chuỗi điển hình của Chrome trên Windows, bạn sẽ thấy nó tự xưng là Mozilla, có chữ AppleWebKit, có cụm like Gecko, rồi mới tới Chrome và Safari. Một chuỗi duy nhất nhắc tên bốn tổ chức khác nhau, và không có thứ nào trong đó là sai sót. Đây là hệ quả tích tụ từ thập niên 1990: khi Netscape phổ biến, các máy chủ chỉ gửi trang có khung cho trình duyệt tự xưng Mozilla, nên Internet Explorer phải tự nhận là Mozilla rồi thêm chú thích compatible phía sau. Về sau Safari thêm chữ Gecko để nhận được nội dung dành cho Firefox, Chrome thêm cả WebKit lẫn Safari để nhận nội dung dành cho Safari, và Edge thêm Chrome vào chuỗi của mình. Mỗi lớp được cộng thêm chỉ để không bị máy chủ đối xử như một trình duyệt lạ. Hệ quả cho việc phân tích: thứ tự kiểm tra quyết định kết quả, và luôn phải kiểm tra trình duyệt hiếm trước trình duyệt phổ biến, vì trình duyệt hiếm thường chứa tên của trình duyệt phổ biến trong chuỗi của nó.
Những trường hợp công cụ nhận sai và lý do
Cần nói thẳng để bạn không bị dẫn sai khi phân tích. Thứ nhất, Opera bị nhận thành Chrome. Chuỗi của Opera chứa cả Chrome lẫn cụm OPR, mà thứ tự kiểm tra trong công cụ đặt Chrome trước, nên nhánh Opera không bao giờ được chạy tới. Thứ hai, mọi trình duyệt xây trên nền Chromium đều hiện là Chrome, trong đó có Cốc Cốc, Brave, Vivaldi và Arc. Riêng Brave thì đây là chủ ý của chính họ: Brave cố tình giữ chuỗi giống hệt Chrome để người dùng không bị nhận dạng qua dấu vết trình duyệt. Thứ ba, iPad chạy iPadOS từ phiên bản 13 trở đi mặc định gửi chuỗi của Safari trên máy tính Mac, nên nó sẽ hiện là macOS trên máy tính chứ không phải máy tính bảng. Thứ tư, phần nhân dựng trang của Chrome và Edge sẽ hiện là WebKit dù thực tế chúng dùng Blink, một nhánh tách ra từ WebKit năm 2013 và đã khác biệt đáng kể. Thứ năm, Windows 11 vẫn báo mã Windows NT 10.0 giống hệt Windows 10, nên không có cách nào phân biệt hai phiên bản này từ chuỗi User Agent, và công cụ ghi là 10 hoặc 11 chính vì lý do đó.
Chuỗi User Agent giả được và tuyệt đối không dùng cho bảo mật
Chuỗi này do trình duyệt tự khai và máy chủ không có cách nào kiểm chứng. Ai cũng đổi được nó: Chrome có sẵn mục thay đổi trong công cụ nhà phát triển, có hàng chục tiện ích mở rộng làm việc đó, và bất kỳ lệnh gọi mạng nào từ dòng lệnh hay từ mã nguồn cũng đặt được chuỗi tùy ý chỉ bằng một tham số. Vì vậy nguyên tắc là không bao giờ dùng User Agent làm cơ sở cho quyết định bảo mật. Đừng cấp quyền dựa trên nó, đừng dùng nó thay cho việc xác thực, và đừng chặn truy cập chỉ vì chuỗi trông giống chương trình tự động, vì kẻ có ý xấu sẽ đổi chuỗi trong ba giây còn người dùng thật thì không. Với việc nhận diện trình thu thập của công cụ tìm kiếm, công cụ này chỉ tìm các từ khóa như bot, crawler hay spider trong chuỗi, và mức đó chỉ đủ để phân loại thô. Muốn xác nhận một lượt truy cập có thật sự đến từ Googlebot hay không, cách chính thức mà Google hướng dẫn là tra ngược tên miền từ địa chỉ IP rồi tra xuôi lại để đối chiếu, hoặc so địa chỉ IP với danh sách dải IP mà Google công bố công khai.
Chuỗi User Agent đang bị thu gọn dần và cái gì thay thế nó
Từ vài năm nay, Chrome triển khai chính sách giảm lượng thông tin trong chuỗi User Agent để hạn chế việc theo dõi người dùng qua dấu vết trình duyệt. Kết quả cụ thể mà bạn thấy được: phần phiên bản chi tiết bị cắt còn con số chính rồi ba số không phía sau, phiên bản hệ điều hành bị đóng băng ở một giá trị cố định, và thông tin về dòng máy trên Android bị thay bằng một chuỗi chung chung. Trên macOS, cả Safari lẫn Chrome đều dừng báo phiên bản ở 10.15.7 bất kể máy đang chạy phiên bản nào mới hơn, nên đừng ngạc nhiên khi thấy con số đó. Thứ thay thế là cơ chế gợi ý ứng dụng khách, trong đó trình duyệt gửi từng mẩu thông tin qua các tiêu đề riêng và chỉ gửi thông tin chi tiết khi máy chủ hỏi rõ. Phía trình duyệt, các giá trị này đọc được qua đối tượng userAgentData của navigator. Ý nghĩa thực tế cho bạn: mọi đoạn mã đang phân tích chuỗi User Agent để quyết định hiển thị gì sẽ ngày càng kém chính xác, và hướng đúng là kiểm tra trực tiếp xem trình duyệt có hỗ trợ tính năng bạn cần hay không thay vì đoán qua tên trình duyệt.
Nên dùng gì thay cho việc phân tích User Agent
Với đa số nhu cầu trong phát triển giao diện, phân tích User Agent là lựa chọn sai và có sẵn cách tốt hơn. Nếu bạn cần biết trình duyệt có hỗ trợ một tính năng nào đó không, hãy kiểm tra trực tiếp sự tồn tại của tính năng đó, ví dụ kiểm tra một thuộc tính có trong đối tượng window hay dùng hàm supports của CSS. Cách này luôn đúng kể cả với trình duyệt chưa ra đời khi bạn viết mã. Nếu bạn cần bố cục thay đổi theo kích thước màn hình, hãy dùng truy vấn phương tiện trong CSS thay vì đoán qua tên thiết bị, vì một chiếc máy tính bảng để ngang có thể rộng hơn một chiếc máy tính xách tay nhỏ. Nếu bạn cần biết thiết bị có màn hình cảm ứng không, hãy dùng truy vấn về cơ chế trỏ thay vì kiểm tra chữ Mobile trong chuỗi, vì nhiều máy tính xách tay hiện nay có cảm ứng còn nhiều máy tính bảng lại cắm chuột. Phân tích User Agent chỉ còn thực sự hợp lý cho ba việc: thống kê tổng hợp, chẩn đoán khi xử lý báo lỗi, và xử lý những lỗi riêng của một phiên bản trình duyệt cụ thể mà không có cách phát hiện nào khác.
Câu hỏi thường gặp (FAQ)
Chuỗi User Agent là gì?
Là một dòng văn bản mà trình duyệt tự khai và gửi kèm trong mỗi yêu cầu tới máy chủ, mô tả tên trình duyệt, phiên bản, hệ điều hành và nhân dựng trang. Máy chủ dùng nó để ghi nhật ký và đôi khi để điều chỉnh nội dung trả về, nhưng nó hoàn toàn do phía trình duyệt quyết định.
Vì sao chuỗi của Chrome lại có chữ Mozilla và Safari?
Do lịch sử tích tụ từ thập niên 1990. Mỗi trình duyệt mới đều thêm tên của trình duyệt đang phổ biến vào chuỗi của mình để không bị máy chủ đối xử như trình duyệt lạ và gửi về phiên bản trang nghèo nàn. Các lớp đó chưa bao giờ được gỡ bỏ nên chuỗi ngày càng dài và lộn xộn.
Vì sao trình duyệt Opera hoặc Cốc Cốc lại hiện là Chrome?
Vì chuỗi của chúng có chứa chữ Chrome và thứ tự kiểm tra trong công cụ đặt Chrome trước nhánh Opera. Mọi trình duyệt xây trên nền Chromium cũng gặp tình trạng tương tự. Riêng Brave thì giữ chuỗi giống hệt Chrome một cách có chủ ý để chống việc nhận dạng người dùng qua dấu vết trình duyệt.
Vì sao iPad của tôi lại hiện là máy tính chạy macOS?
Vì từ iPadOS phiên bản 13, Safari trên iPad mặc định gửi chuỗi giống hệt Safari trên máy tính Mac để nhận được phiên bản trang dành cho máy tính. Đây là hành vi có chủ đích của Apple, không phải lỗi. Muốn nhận đúng, bạn phải kiểm tra thêm màn hình có hỗ trợ cảm ứng hay không.
Có phân biệt được Windows 10 và Windows 11 không?
Không. Windows 11 vẫn báo mã Windows NT 10.0 y hệt Windows 10 trong chuỗi User Agent, nên không có cách nào tách hai phiên bản từ chuỗi này. Đó là lý do kết quả ghi là 10 hoặc 11. Muốn biết chính xác, phải dùng cơ chế gợi ý ứng dụng khách và hỏi thêm thông tin phiên bản đầy đủ.
Vì sao macOS luôn hiện phiên bản 10.15.7?
Vì cả Safari lẫn Chrome đều cố tình đóng băng con số này bất kể máy đang chạy phiên bản nào mới hơn, nhằm giảm thông tin có thể dùng để nhận dạng người dùng. Đây là một phần của xu hướng thu gọn chuỗi User Agent chứ không phải máy bạn có vấn đề.
Chuỗi User Agent có giả được không?
Rất dễ. Chrome có sẵn mục thay đổi trong công cụ nhà phát triển, có nhiều tiện ích mở rộng làm việc này, và mọi lệnh gọi mạng từ dòng lệnh hay từ mã nguồn đều đặt được chuỗi tùy ý bằng một tham số. Do đó không bao giờ được dùng chuỗi này làm cơ sở cho quyết định bảo mật hay phân quyền.
Làm sao xác nhận một lượt truy cập thật sự đến từ Googlebot?
Không thể xác nhận bằng chuỗi User Agent vì ai cũng khai được là Googlebot. Cách chính thức Google hướng dẫn là tra ngược tên miền từ địa chỉ IP rồi tra xuôi lại để đối chiếu, hoặc so địa chỉ IP với danh sách dải IP mà Google công bố công khai và cập nhật định kỳ.
Vì sao nhân dựng trang của Chrome lại hiện là WebKit?
Vì chuỗi của Chrome vẫn chứa chữ AppleWebKit từ thời nó dùng chung nhân với Safari. Thực tế Chrome và Edge dùng Blink, một nhánh tách khỏi WebKit từ năm 2013 và đã khác biệt đáng kể. Chuỗi giữ nguyên tên cũ để tương thích ngược nên phần này luôn gây hiểu nhầm.
Chuỗi tôi dán vào có bị gửi lên máy chủ không?
Không. Toàn bộ việc so khớp thực hiện bằng biểu thức chính quy chạy trong trình duyệt của bạn, không có bước gọi máy chủ. Bạn dùng được cho các chuỗi trích từ nhật ký nội bộ mà không lo dữ liệu bị chuyển ra ngoài.
Cơ chế gợi ý ứng dụng khách là gì?
Là cách thay thế cho chuỗi User Agent, trong đó trình duyệt gửi từng mẩu thông tin qua các tiêu đề riêng và chỉ gửi chi tiết khi máy chủ hỏi rõ. Phía mã nguồn phía trình duyệt, các giá trị này đọc được qua đối tượng userAgentData. Cách này giảm lượng thông tin lộ ra mặc định nên khó theo dõi người dùng hơn.
Có nên viết mã hiển thị khác nhau dựa trên User Agent không?
Không nên. Hãy kiểm tra trực tiếp xem trình duyệt có hỗ trợ tính năng bạn cần hay không, dùng truy vấn phương tiện cho bố cục theo kích thước màn hình, và dùng truy vấn về cơ chế trỏ để biết có cảm ứng hay không. Phân tích User Agent chỉ nên dùng cho thống kê và chẩn đoán lỗi.
Từ khóa liên quan
- user agent là gì
- phân tích user agent
- user agent parser
- xem user agent của trình duyệt
- chuỗi user agent chrome
- kiểm tra trình duyệt và hệ điều hành
- user agent client hints
- user agent reduction
- nhận diện thiết bị mobile
- ipad hiển thị như macos
- windows 11 user agent nt 10.0
- xác minh googlebot
- dải ip của googlebot
- chặn bot bằng user agent
- giả mạo user agent
- đổi user agent trong chrome
- feature detection thay vì user agent
- đọc log máy chủ web
- trình duyệt cốc cốc user agent
- nhân trình duyệt blink webkit gecko
