Giải thích dễ hiểu về chuỗi User-Agent: trông như thế nào, cách đọc từng token, vì sao vẫn ghi Mozilla, và cách kiểm tra chuỗi của bạn trong vài giây.
Mỗi khi trình duyệt tải một trang, nó gửi kèm một đoạn văn bản ngắn gọi là chuỗi User-Agent — một nhãn tự khai báo trình duyệt, engine và hệ điều hành bạn đang dùng. Thoạt nhìn nó giống như một mớ ký tự vô nghĩa, nhưng mỗi phần đều là một token riêng biệt, và đọc đúng nó sẽ cho bạn biết chính xác website nghĩ nó đang giao tiếp với thứ gì.
Tóm tắt nhanh
- User-Agent (UA) là một header HTTP duy nhất, được gửi trên mỗi yêu cầu, nêu tên trình duyệt, engine render, hệ điều hành và loại thiết bị của bạn.
- Nó trông như thế này:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36— một chuỗi các token, không phải một cụm từ liền mạch. - Gần như mọi trình duyệt vẫn bắt đầu UA bằng
Mozilla/5.0vì lý do tương thích lịch sử, chứ không phải vì nó thực sự là phần mềm của Mozilla. - Bạn có thể xem UA của chính mình ngay lập tức bằng cách chạy
navigator.userAgenttrong DevTools, hoặc kiểm tra header của yêu cầu mà trình duyệt gửi đi. - Vì chuỗi này là tự khai báo và rất dễ chỉnh sửa, Chromium đang dần chuyển sang User-Agent Client Hints — một phương án thay thế có cấu trúc và có thể kiểm chứng hơn.
User-Agent là gì, nói một cách đơn giản
Chuỗi User-Agent là một dòng văn bản mà trình duyệt tự nguyện gửi kèm mỗi yêu cầu HTTP, trong một header có tên User-Agent. Nhiệm vụ của nó là giúp máy chủ thích ứng: gửi giao diện thân thiện với di động cho điện thoại, cảnh báo các trình duyệt rất cũ về tính năng không được hỗ trợ, hoặc đơn giản là ghi lại trình duyệt nào thực sự truy cập một trang web. Nó đã tồn tại từ những trình duyệt đầu tiên hồi đầu thập niên 1990, và định dạng vẫn giữ khả năng tương thích ngược suốt từ đó đến nay — đó chính xác là lý do vì sao ngày nay nó trông lộn xộn đến vậy.
Giải phẫu một chuỗi User-Agent thực tế
Đây là một chuỗi UA điển hình của Chrome trên desktop, được tách thành từng phần:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
| Token | Ý nghĩa |
|---|---|
Mozilla/5.0 | Một token tương thích cũ — xem bên dưới, nó không có nghĩa trình duyệt là Mozilla/Firefox |
(Windows NT 10.0; Win64; x64) | Hệ điều hành (Windows 10/11) và kiến trúc CPU (64-bit) |
AppleWebKit/537.36 | Dòng dõi engine mà engine render thực sự kế thừa |
(KHTML, like Gecko) | Một cụm từ tương thích tuyên bố hành vi giống hai engine lịch sử khác |
Chrome/124.0.0.0 | Trình duyệt thực sự và số phiên bản của nó |
Safari/537.36 | Một token tương thích khác, tồn tại vì engine của Chrome, Blink, được fork từ WebKit (engine của Safari) |
Firefox và Safari theo cùng một khuôn mẫu với các token khác nhau — Firefox là Gecko/20100101 Firefox/125.0, Safari là Version/17.4 Safari/605.1.15 — nhưng cấu trúc (khối nền tảng, rồi đến token engine, rồi đến tên và phiên bản trình duyệt) nhất quán giữa tất cả các trình duyệt.
Vì sao gần như mọi trình duyệt vẫn ghi "Mozilla"
Đây là phần khiến nhiều người bối rối nhất: Chrome, Safari, Edge, và thậm chí một số công cụ không phải trình duyệt đều bắt đầu UA bằng Mozilla/5.0, dù chẳng liên quan gì đến dự án Mozilla. Tóm tắt lịch sử: giữa thập niên 1990, tên mã nội bộ của Netscape Navigator là "Mozilla", và các website bắt đầu kiểm tra token này để quyết định xem trình duyệt của khách truy cập có hỗ trợ những tính năng khi đó còn tiên tiến như frame hay không. Khi Internet Explorer muốn được bật những tính năng tương tự, nó đã thêm Mozilla vào chuỗi UA của chính mình để vượt qua các kiểm tra đó. Mọi trình duyệt sau này đều làm theo để tránh bị phục vụ một trang bị cắt giảm tính năng, và token đó tồn tại vĩnh viễn từ đó. Đây là một hóa thạch của các cuộc chiến phát hiện trình duyệt thập niên 1990, chứ không phải một định danh có ý nghĩa — một trong những điều kỳ quặc nổi tiếng nhất trong lịch sử web.
Cách xem User-Agent của chính bạn
Có hai cách để kiểm tra, và đôi khi chúng không khớp nhau:
Từ JavaScript, mở console DevTools của trình duyệt và chạy:
navigator.userAgent
Lệnh này trả về chính xác chuỗi mà script của trang có thể đọc được.
Từ yêu cầu thô, mở panel Network trong DevTools, tải lại trang, nhấp vào bất kỳ yêu cầu nào, và tìm header User-Agent trong header của yêu cầu. Đây là những gì máy chủ thực sự nhận được — thường giống hệt navigator.userAgent, mặc dù một tiện ích mở rộng hay proxy có thể viết lại một trong hai mà không đụng đến cái còn lại, và bản thân sự không khớp đó là một dấu hiệu có thể phát hiện được.
Công cụ kiểm tra nhân trình duyệt của BrowserInsight hiển thị song song User-Agent bạn khai báo và engine render thực sự của trình duyệt, để bạn thấy ngay liệu chúng có khớp nhau không.
User-Agent như một tín hiệu định danh và lấy dấu vân tay
Vì chuỗi UA tiết lộ hệ điều hành, kiến trúc, trình duyệt và phiên bản trên mỗi yêu cầu mà không cần ai hỏi, nó luôn đóng vai trò như một tín hiệu định danh thụ động — một trong nhiều đầu vào tạo nên dấu vân tay trình duyệt. Đó cũng là một phần lý do vì sao Chromium đang dần đóng băng chuỗi cũ này thành một stub chung chung và chuyển sang User-Agent Client Hints (UA-CH), một API có cấu trúc chỉ tiết lộ chi tiết khi máy chủ yêu cầu rõ ràng, thay vì phát sóng mọi thứ theo mặc định.
Lưu ý: giả mạo thì dễ, nhưng bị phát hiện cũng dễ không kém
Vì chuỗi UA chỉ là văn bản tự khai báo, thay đổi nó chỉ cần một cài đặt trình duyệt hoặc một tiện ích mở rộng. Người ta làm điều này để kiểm thử, để truy cập nội dung bị giới hạn theo trình duyệt, hoặc vì lý do quyền riêng tư. Nhưng UA chỉ là một trong hàng chục tín hiệu mà trình duyệt phát ra, và những tín hiệu còn lại hiếm khi được thay đổi để khớp theo — vì vậy một trang tuyên bố là Safari nhưng engine JavaScript, client hints và các đặc điểm render đều nói khác đi là một sự mâu thuẫn mà website có thể phát hiện nhanh chóng. Nếu bạn tò mò việc phát hiện đó hoạt động ra sao, xem cách các website phát hiện giả mạo User-Agent. Bài học cho ai đó chỉnh sửa UA vì tò mò: nó chỉ thay đổi những gì một header khai báo, chứ không thay đổi bản chất thực sự của trình duyệt bạn.
Câu hỏi thường gặp
Vì sao User-Agent của tôi ghi "like Gecko" dù tôi không dùng Firefox?
(KHTML, like Gecko) là một hóa thạch tương thích khác, không phải tuyên bố thực sự về engine của bạn. Nó báo hiệu khả năng hỗ trợ rộng rãi với hành vi bố cục thời Gecko/KHTML, để những website cũ viết cho các engine đó vẫn hiển thị chấp nhận được. Nó xuất hiện trong Chrome, Safari và Edge bất kể engine nào thực sự đang chạy.
Chuỗi User-Agent có giống với dấu vân tay trình duyệt của tôi không?
Không — nó chỉ là một đầu vào của dấu vân tay, không phải bản thân dấu vân tay. Một dấu vân tay trình duyệt đầy đủ kết hợp UA với kết xuất canvas, đầu ra WebGL, phông chữ, thông số màn hình, và nhiều hơn nữa. Riêng UA chỉ xác định các nhóm rộng (họ trình duyệt, hệ điều hành đại khái); tự nó không định danh duy nhất một thiết bị cụ thể.
Hai trình duyệt khác nhau có thể có cùng một User-Agent không?
Có. Vì chuỗi này là tự khai báo, về mặt kỹ thuật bất kỳ trình duyệt nào cũng có thể gửi bất kỳ văn bản UA nào nó muốn, kể cả sao chép từ một trình duyệt hoàn toàn khác. Đó chính xác là lý do các website đối chiếu UA với các tín hiệu khác thay vì tin tưởng nó một cách độc lập.
Chuỗi User-Agent cuối cùng có biến mất không?
Không phải ngay lập tức, nhưng vai trò của nó đang thu hẹp. Chromium đang dần đóng băng chuỗi cũ thành một stub ít chi tiết trong khi User-Agent Client Hints tiếp quản vai trò kênh cấu trúc chính. Firefox và Safari hiện chưa có tương đương UA-CH và vẫn tiếp tục dựa vào chuỗi truyền thống.
Kết luận
Chuỗi User-Agent trông có vẻ bí ẩn, nhưng thực chất chỉ là một danh sách token chứa đầy yếu tố tương thích, tích lũy qua ba thập kỷ các trình duyệt cố gắng không phá vỡ website của nhau — nền tảng, dòng dõi engine, cùng tên và phiên bản trình duyệt. Đọc nó khá đơn giản một khi bạn nắm được khuôn mẫu, và kiểm tra UA của chính bạn chỉ mất một dòng lệnh trong DevTools. Vì nó là tự khai báo, hãy xem nó như một lời tuyên bố chứ không phải một sự đảm bảo — và nếu bạn muốn xem engine và tín hiệu định danh thực sự của mình có khớp với những gì UA tuyên bố hay không, hãy chạy công cụ kiểm tra nhân trình duyệt của BrowserInsight.
Đề xuất đọc thêm:


