User-Agent header là gì? | Chuỗi trình duyệt gửi kèm mọi request HTTP

(Cập nhật: 19 tháng 7, 2026 ) User-Agent HTTP header trình duyệt debug Client Hints support frontend
Kết luận

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-AgentChuỗi gửi trên dây HTTP
navigator.userAgentCùng thông tin phía JS (có thể bị giảm chi tiết)
UA sniffingParse chuỗi để nhánh code theo browser — ngày càng không khuyến khích
Không phải định danh người dùng

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ạnGợi ý
Mozilla/5.0Tiề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.36Engine 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.0Nhận diện Chrome (và nhiều Chromium fork)
Safari/537.36Token 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?

Dùng UA đúng 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:

  1. Khách mở đúng thiết bị đang lỗi
  2. Mở công cụ UA → Copy
  3. Dán vào ticket kèm URL + screenshot
  4. 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ưởngVí dụ
Feature detectionHỏi “API này có không?”'serviceWorker' in navigator
Media / responsiveHỏ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:

  1. Mở trang — chuỗi User-Agent hiện tại hiện ngay
  2. Bấm sao chép để dán vào Discord/email/ticket
  3. 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