Giải ngố: Mozilla/5.0 là gì? Tại sao trình duyệt nào cũng có chuỗi này trong User-Agent?

Giải ngố: Mozilla/5.0 là gì? Tại sao trình duyệt nào cũng có chuỗi này trong User-Agent?

Tin ngắn hàng ngày dành cho bạn
  • Hơn 1 tuần nay mình không đăng bài, không phải không có gì để viết mà đang tìm cách để phân phối nội dung có giá trị hơn trong thời đại AI đang bùng nổ mạnh mẽ như thế này.

    Như từ hồi đầu năm đã chia sẻ, số lượng người truy cập vào trang blog của mình đang dần ít đi. Khi xem thống kê, lượng người dùng trong 6 tháng đầu năm 2025 đã giảm 30% so với cùng kì năm ngoái, 15% so với 6 tháng cuối năm 2024. Như vậy một sự thật là người dùng đang rời bỏ dần đi. Nguyên nhân do đâu?

    Mình nghĩ lý do lớn nhất là thói quen của người dùng đã thay đổi. Họ tìm thấy blog chủ yếu qua các công cụ tìm kiếm, trong đó lớn nhất là Google. Gần 1/2 số lượng người dùng quay trở lại blog mà không cần thông qua bước tìm kiếm. Đó là một tín hiệu đáng mừng nhưng vẫn không đủ để tăng lượng người dùng mới. Chưa kể giờ đây, Google đã ra mắt tính năng AI Search Labs - tức là AI hiển thị luôn nội dung tổng hợp khi người dùng tìm kiếm, điều đó càng khiến cho khả năng người dùng truy cập vào trang web thấp hơn. Một điều thú vị là khi Search Labs được giới thiệu, thì các bài viết bằng tiếng Anh đã soán ngôi trong bảng xếp hạng truy cập nhiều nhất.

    Một bài viết của mình thường rất dài, có khi lên đến cả 2000 chữ. Mà để viết ra được một bài như thế tốn nhiều thời gian. Nhiều bài viết ra chẳng có ai đọc là điều bình thường. Mình biết và chấp nhận vì không phải ai cũng gặp phải vấn đề đang nói đến. Viết đối với mình như một cách để rèn luyện sự kiên nhẫn và cả tư duy. Viết ra mà giúp được cả ai đó là một điều tuyệt vời.

    Vậy nên mình đang nghĩ sẽ tập trung vào nội dung ngắn và trung bình để viết được nhiều hơn. Nội dung dài chỉ khi muốn viết chi tiết hoặc đi sâu về một chủ đề nào đó. Nên là đang tìm cách thiết kế lại trang blog. Mọi người cùng chờ nha 😄

    » Xem thêm
  • CloudFlare đã giới thiệu tính năng pay per crawl để tính phí cho mỗi lần AI "cào" dữ liệu trên trang web của bạn. Là sao ta 🤔?

    Mục đích của SEO là giúp các công cụ tìm kiếm nhìn thấy trang web. Khi người dùng tìm kiếm nội dung mà có liên quan thì nó hiển thị trang web của bạn ra kết quả tìm kiếm. Điều này gần như là đôi bên cùng có lợi khi Google giúp nhiều người biết đến trang web hơn, còn Google thì được nhiều người dùng hơn.

    Bây giờ cuộc chơi với các AI Agents thì lại khác. AI Agents phải chủ động đi tìm kiếm nguồn thông tin và tiện thể "cào" luôn dữ liệu của bạn về, rồi xào nấu hay làm gì đó mà chúng ta cũng chẳng thể biết được. Vậy đây gần như là cuộc chơi chỉ mang lại lợi ích cho 1 bên 🤔!?

    Nước đi của CloudFlare là bắt AI Agents phải trả tiền cho mỗi lần lấy dữ liệu từ trang web của bạn. Nếu không trả tiền thì tôi không cho ông đọc dữ liệu của tôi. Kiểu vậy. Hãy chờ thêm một thời gian nữa xem sao 🤓.

    » Xem thêm
  • Lúc khái niệm "Vibe Code" bùng nổ mình cũng tò và tìm hiểu xem nó là gì. Hoá ra là chỉ cách lập trình mới: Lập trình viên ra lệnh và để cho LLM tự viết mã. Sau đó là hàng loạt các bài viết nói về cách họ đã xây dựng ứng dụng mà không cần phải viết một dòng mã nào, hoặc 100% là do AI viết...

    Mình không có ý kiến gì vì mỗi người một sở thích. Nhưng nếu tiếp xúc với nhiều thông tin như vậy thì ít nhiều thế hệ lập trình viên mới sẽ "ám ảnh". Khi làm việc với ngôn ngữ lập trình, chúng ta đang tiếp xúc ở bề nổi rồi. Đằng sau đó còn nhiều lớp khác che giấu sự phức tạp. Ví dụ biết viết JavaScript nhưng có biết nó chạy như thế nào không 🤔? Trên thực tế bạn chẳng cần phải biết nó chạy như thế nào mà chỉ cần biết cú pháp là viết được chương trình chạy ngon ơ.

    LLMs giờ đây lại thêm một lớp ảo hoá cho việc viết mã. Tức là nơi chúng ta không cần trực tiếp viết mà là ra lệnh. Làm việc sẽ nhanh hơn nhưng khi gặp vấn đề thì nhiều khả năng phải vận dụng kiến thức của tầng thấp hơn để giải quyết.

    Mình dùng Cursor, nhưng tính năng thích nhất và dùng nhiều nhất là Autocomplete & Suggestions. Thi thoảng cũng dùng Agents để bảo nó viết tiếp đoạn mã đang dở, thường thì nó làm rất tốt. Hoặc khi gặp lỗi thì hỏi, có lúc giải quyết được, lúc thì không. Nhìn chung nó đang làm thay nhiệm vụ của Google & Stack Overflow, giúp tiết kiệm thời gian 😆

    LLMs như một cuốn bách khoa toàn thư rất khủng khiếp. Hỏi gì cũng biết, cũng trả lời được nhưng có một sự thật là nó chỉ là mô hình đoán chữ (đoán tokens). Thế nên nếu vấn đề phổ biến thì nó sẽ làm rất tốt, nhưng vấn đề ít phổ biến hơn thì nó lại rất tệ, hoặc thậm chí là đưa ra thông tin sai lệch, nhiễu... Tóm lại, cần phải biết cách khai thác thông tin, mà để biết thì buộc người dùng phải có một lượng kiến thức nhất định, tránh rơi vào cái bẫy thiên kiến uy quyền (tin tưởng tuyệt đối vào ai đó) hoặc thiên kiến xác nhận (xác nhận niềm tin sẵn có bằng cách chỉ tìm bằng chứng xác nhận niềm tin đó).

    Tại thấy bài viết này nên lại nổi hứng viết vài dòng 🤓 Why I'm Dialing Back My LLM Usage

    » Xem thêm

Vấn đề

Một ngày đẹp trời khi đang nghiên cứu về chuỗi User-Agent (UA) của các trình duyệt web đang được sử dụng phổ biến hiện nay. Tuy chúng khá dài và có vẻ khác nhau trên các loại trình duyệt nhưng tôi nhận ra ngoài những chuỗi đặc trưng gợi nên tên của trình duyệt như Chrome/43.0.2357.65, Firefox/40.0, MSIE 9.0... thì gần như tất cả đều có chứa một chuỗi là Mozilla/5.0 hoặc ít phổ biến hơn là WebKit. Vậy thì chúng là gì và tại sao lại xuất hiện trong User-Agent? Tôi đã lật lại lịch sử và phát hiện ra một số thú vị về điều này.

Lịch sử của chuỗi UA

NCSA Mosaic là trình duyệt web đầu tiên trên thế giới, ngay khi ra mắt Mosaic đã tự gọi mình là NCSA_Mosaic/2.0 (Windows 3.1) thông qua chuỗi UA mà ta biết đến tận nay. Mosaic đã biết hiển thị hình ảnh cùng với văn bản :D.

Sau đó xuất hiện một trình duyệt web mới được gọi là "Mozilla", đó là viết tắt của "Mosaic Killer". Nhưng họ chợt nhận ra cái tên đó không mấy thú vị vì vậy Mozilla đã được đổi thành Netscape và Netscape tự gọi mình là Mozilla/1.0 (Win3.1).

Netscape hỗ trợ frame, frame đã trở nên phổ biến trong cộng đồng Internet nhưng Mosaic thì lại không hỗ trợ frame, do đó các nhà phát triển buộc phải kiểm tra loại trình duyệt đang dùng để gửi về frame. Nếu trình duyệt là Netscape thì gửi còn lại thì không :D.

Netscape sau đó đã chế nhạo Microsoft (MS), coi Windows là "poorly debugged device drivers" và Microsoft đã rất tức giận. Vì vậy Microsoft đã tạo ra trình duyệt web của riêng họ mà họ gọi là Internet Explorer (IE) với hy vọng nó sẽ trở thành một "Netscape Killer".

Tất nhiên IE phải hỗ trợ frame, nhưng IE không phải là Mozilla, nên nó không được cung cấp frame bởi các quản trị viên web. MS ngày càng mất kiên nhẫn và không muốn đợi họ tìm hiểu về IE. Vì vậy IE tuyên bố rằng nó "tương thích với Mozilla" và bắt đầu mạo danh Netscape tự gọi mình là Mozilla/1.22 (compatible; MSIE 2.0; Windows 95). Ngay lập tức IE đã nhận được frame, điều đó làm MS hài lòng nhưng các quản trị viên web lại bối rối. MS đã bán IE cùng với Windows khiến cho nó phổ biến và tốt hơn Netscape. Cuộc chiến trình duyệt đầu tiên đã nổ ra khắp nơi. 

Đúng như MS dự đoán Netscape đã bị thất thủ. Nhưng Netscape đã được tái sinh thành Mozilla và Mozilla đã xây dựng Gecko và tự gọi mình là Mozilla/ 5.0 (Windows; U; Windows NT 5.0; en-US; rv: 1.1) Gecko/20020826. Gecko khi đó là công cụ kết xuất hiển thị tốt nhất.

Mozilla tiếp tục đổi tên thành Firefox và tự gọi mình là Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv: 1.7.5) Gecko/20041108 Firefox/1.0. Firefox lúc này đang thể hiện vai trò duyệt web rất tốt. Gecko bắt đầu sinh sôi và các trình duyệt khác ra đời sử dụng mã của nó. Chúng tự gọi là những cái tên như Mozilla/ 5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv: 1.7.2) Gecko/20040825 Camino/0.8.1 the one và Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv: 1.8.1.8) Gecko/20071008 SeaMonkey/1.0. Tất cả đều cố "giả vờ" mình là Mozilla và đều được cung cấp bởi Gecko.

Gecko là trình kết xuất hiển thị tốt còn IE thì ngược lại, điều đó khiến cho các quản trị viên web lại lục sục phân biệt mã trả về trình duyệt. Các trình duyệt khác cũng dần đuối sức trước Gecko.

Những tín đồ của Linux đã thấy điều đó và không thể ngồi yên vì thế họ đã chế tạo ra Konqueror có engine là KHTML mà họ cho là tốt "như" Gecko nhưng nó không phải là Gecko nên không được trả về mã của Gecko, vì vậy Konquerer bắt đầu tuyên bố "tương thích với Gecko" để có được mã của Gecko và tự gọi nó là Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko).

Sau đó Opera đến và nói "chắc chắn là chúng tôi nên cho phép người dùng tự quyết định họ thích chọn trình duyệt nào". Vì vậy Opera đã cho phép người dùng tự chọn các chuỗi UA là Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; vi) Opera 9.51 hoặc Mozilla/5.0 (Windows NT 6.0; U; en; rv: 1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51 hoặc Opera/9.51 (Windows NT 5.1; U; en).

Apple đã xây dựng Safari và sử dụng KHTML nhưng họ đã thêm nhiều tính năng nên dự án được tách ra và gọi nó là WebKit nhưng họ lại muốn mã của các trang được viết cho KHTML. Vì vậy Safari tự gọi mình là Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5.

Một lần nữa MS lại mang Internet Explorer quay trở lại với một phiên bản mới. Họ gọi nó là Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) và nó hiển thị mã của Gecko rất tốt, nhưng chỉ khi quản trị viên web ra lệnh cho nó làm như vậy.

Cuối cùng Google đã xây dựng Chrome sử dụng Webkit giống như Safari, và tất nhiên Chrome muốn có các trang web được xây dựng cho Safari nên nó lại giả vờ là Safari. Chrome tự gọi mình là Mozilla/5.0 (Windows; U; Windows NT 5.1; vi-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13.

Các trình duyệt sau đó dù được sinh ra như thế nào thì chúng cũng "cố gắng" chạy đua để trở nên "giống như" các trình duyệt đã có trên thị trường Internet.

Cho đến lúc này hãy tóm tắt lại xem cuộc chiến trình duyệt đã để lại gì cho chúng ta. Chrome đã sử dụng WebKit và giả vờ là Safari, còn WebKit giả là KHTML và KHTML giả là Gecko, vậy là tất cả các trình duyệt đều giả vờ là Mozilla!!!

Tổng kết

Giới trình duyệt đã trải qua nhiều biến động để lại chuỗi UA hỗn loạn như hiện nay. Vào năm 2020, Chrome đã tuyên bố sẽ loại bỏ chuỗi UA ra khỏi trình duyệt thay vào đó là nhưng có vẻ vẫn chưa thực hiện được. Còn về thực tại, các lập trình viên đang viết mã để tương thích với Mozilla/5.0 mà thôi :D.

Tham khảo:

Cao cấp
Hello

Bí mật ngăn xếp của Blog

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (2)

Nội dung bình luận...
Avatar
Hương Trịnh2 năm trước

Bỏ UA đi thì sao mà detect đc browser nữa nhỉ? Kb có phát minh gì mới sao?

Trả lời
Avatar
Xuân Hoài Tống2 năm trước

Mình cũng đoán là chắc có công nghệ gì đó thay thế

Avatar
Vũ Mạnh Đức3 năm trước

Oh thì ra là vậy thật thú vị h mới hiểu :D

Trả lời
Avatar
Xuân Hoài Tống3 năm trước

:D hay mà bạn