User-Agent header là gì? | Chuỗi trình duyệt gửi kèm mọi request HTTP
User-Agent là header HTTP tự nhận diện client — chuỗi dài kiểu Mozilla/5.0 (... Chrome/...). Dùng tốt cho support, log, analytics thô; không dùng làm xác thực hay nhánh UI chính. Ưu tiên responsive + feature detection; UA chỉ khi cần fallback. Xem chuỗi hiện tại bằng UA Display (mở trang là có, copy được, chạy local trên trình duyệt).
Khi website lỗi chỉ trên máy khách hàng, câu hỏi đầu tiên của dev thường là: “Bạn đang dùng trình duyệt gì?” Câu trả lời mơ hồ (“Chrome ấy mà”) không đủ. User-Agent header chính là chuỗi máy gửi kèm mọi request — nếu đọc được, bạn khoanh vùng OS/browser nhanh hơn nhiều.
Bài này giải thích User-Agent header là gì, cấu trúc chuỗi, giới hạn thực tế năm 2026, và khi nào nên (hoặc không nên) dựa vào nó.
Bài viết này giúp bạn
- Hiểu UA là header HTTP, không phải API riêng
- Đọc nhanh các token trong chuỗi (
Windows NT,Mobile,Chrome/...) - Biết khi nào hữu ích (support ticket, log) và khi nào nguy hiểm (sniffing UI)
- Phân biệt UA cổ điển với Client Hints
- Lấy UA thật trong 10 giây bằng công cụ hiển thị
User-Agent header là gì?
Trong HTTP, client gửi nhiều request header: Accept, Accept-Language, Cookie, và User-Agent.
Ví dụ request đơn giản:
GET /dashboard HTTP/1.1
Host: app.example.vn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
Accept-Language: vi-VN,vi;q=0.9
Server (nginx, Express, Cloudflare…) đọc được header này trong log hoặc middleware. Trên trình duyệt, JavaScript đọc gần tương đương qua navigator.userAgent.
| Khái niệm | Ý nghĩa |
|---|---|
Header User-Agent | Chuỗi gửi trên dây HTTP |
navigator.userAgent | Cùng thông tin phía JS (có thể bị giảm chi tiết) |
| UA sniffing | Parse chuỗi để nhánh code theo browser — ngày càng không khuyến khích |
Hai người dùng Chrome cùng phiên bản có thể có UA gần như giống nhau. UA không thay thế cookie, session hay tài khoản.
Đọc chuỗi User-Agent từng đoạn
Lấy ví dụ desktop Chrome trên Windows:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
| Đoạn | Gợi ý |
|---|---|
Mozilla/5.0 | Tiền tố lịch sử — gần như mọi browser hiện đại đều có |
(Windows NT 10.0; Win64; x64) | Gợi ý OS / kiến trúc |
AppleWebKit/537.36 | Engine render (Blink cũng báo WebKit vì lịch sử) |
(KHTML, like Gecko) | Thêm lớp tương thích cổ |
Chrome/124.0.0.0 | Nhận diện Chrome (và nhiều Chromium fork) |
Safari/537.36 | Token tương thích — không có nghĩa đây là Safari thật |
Ví dụ mobile (rút gọn):
Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36
Token Mobile thường xuất hiện trên UA điện thoại — nhưng vẫn có thể bị giả bằng DevTools.
Vì sao chuỗi dài và “dối”?
Thập niên 90–2000, nhiều site chặn trình duyệt lạ. Các vendor bắt đầu giả danh lẫn nhau để vào được web. Kết quả: chuỗi UA hôm nay là lớp tương thích chồng lớp, không phải bảng thông số sạch.
Khi nào User-Agent thực sự hữu ích?
| Tình huống | Nên / không nên |
|---|---|
| Ticket support: 'trang trắng trên máy khách' | Nên — lấy UA + bước tái hiện để dev mở đúng browser |
| Log API: thống kê tỷ lệ mobile thô | Tạm được — hiểu có nhiễu và bot giả UA |
| Ẩn/hiện menu theo 'nếu iPhone' | Không nên — dùng CSS @media / container query |
| Chặn bot chỉ bằng chứa chữ bot | Yếu — dễ giả; kết hợp rate limit, challenge, hành vi |
| Bắt buộc Chrome mới được login | Không nên — UX tệ + giả UA dễ |
| Polyfill cực cũ (IE legacy) | Hiếm — 2026 gần như không còn; feature detect hơn |
Case: freelance / outsourcing Việt Nam
Khách nhắn Zalo: “Form không submit được”. Bạn hỏi phiên bản Chrome — họ không biết. Gửi link What is my User Agent?, họ copy chuỗi dán lại. Bạn thấy Android + Chrome/110 — tái hiện trên máy ảo Android thay vì debug mãi trên Mac Safari.
Quy trình gọn:
- Khách mở đúng thiết bị đang lỗi
- Mở công cụ UA → Copy
- Dán vào ticket kèm URL + screenshot
- Dev grep log theo substring UA hoặc khoảng thời gian
Giới hạn năm 2026: đừng sniff quá đà
1) Giả mạo dễ
DevTools → Network conditions → User agent override. Extension cũng đổi được. Mọi nhánh bảo mật dựa chỉ vào UA đều không đáng tin.
2) UA Reduction (Chrome và xu hướng privacy)
Trình duyệt đang làm mờ chi tiết phiên bản OS/model trong chuỗi cổ điển để giảm fingerprinting. Phân tích “đúng từng build số” ngày càng khó hơn trước.
3) User-Agent Client Hints
Cơ chế mới hơn: server/client trao đổi hint có kiểm soát (Sec-CH-UA, navigator.userAgentData).
if (navigator.userAgentData) {
const high = await navigator.userAgentData.getHighEntropyValues([
"platform",
"platformVersion",
"model",
]);
console.log(high.platform, high.model);
} else {
// Safari / môi trường chưa hỗ trợ đầy đủ → fallback chuỗi UA cổ
console.log(navigator.userAgent);
}
Thực tế team VN: nhiều dự án vẫn đọc navigator.userAgent vì hỗ trợ Safari/WebView. Client Hints là hướng đi, chưa phải “xóa hết code UA ngay”.
Feature detection vs UA sniffing
| Cách | Ý tưởng | Ví dụ |
|---|---|---|
| Feature detection | Hỏi “API này có không?” | 'serviceWorker' in navigator |
| Media / responsive | Hỏi “viewport thế nào?” | @media (max-width: 768px) |
| UA sniffing | Đoán “đây là Safari nên…” | /iPhone/.test(ua) |
Ưu tiên hàng trên. Chỉ sniff khi vendor bug cụ thể đã xác nhận và có plan xóa nhánh.
// Tốt hơn sniff "nếu Chrome"
if (window.showOpenFilePicker) {
// dùng File System Access API
} else {
// fallback <input type="file">
}
Lấy User-Agent trên Kawa Dev Tools
Công cụ UA Display:
- Mở trang — chuỗi User-Agent hiện tại hiện ngay
- Bấm sao chép để dán vào Discord/email/ticket
- Xử lý trên trình duyệt — phù hợp khi không muốn cài extension
Dùng khi: hỗ trợ khách, tự kiểm tra WebView công ty, đối chiếu UA trong log Cloudflare/nginx.
Không làm gì: không sửa UA hệ thống, không “hack” để vượt paywall — chỉ hiển thị và copy chuỗi đang gửi.
Checklist gửi báo lỗi kèm UA
- Đúng thiết bị/trình duyệt đang lỗi (không lấy UA từ máy khác)
- Copy nguyên chuỗi, không gõ tay rút gọn
- Kèm URL, thời điểm, bước 1-2-3 tái hiện
- Ghi thêm: mobile data / Wi-Fi, extension lạ nếu nghi ngờ
- Không gửi kèm cookie, JWT, mật khẩu
FAQ mở rộng
Bot crawler có User-Agent không?
Có — Googlebot, các bot AI thường tự khai báo. Vẫn có bot xấu giả Chrome; đừng tin mù quáng.
Accept-Language: vi-VN khác UA thế nào?
Language cho biết ngôn ngữ ưa thích; UA cho biết phần mềm client. Hai header bổ sung nhau trong log.
WebView app native dùng UA gì?
Thường có token kiểu ; wv) hoặc tên app. Khi debug hybrid app, luôn lấy UA trong đúng WebView, không lấy từ Chrome thường.
Liên kết liên quan
- UA Display — xem User-Agent
- Danh sách công cụ
- Bug report template — gom môi trường khi báo lỗi game/web