navigator.connection lộ effectiveType, downlink, rtt mà không cần xin quyền — và chỉ Chromium hỗ trợ cũng là một tín hiệu.
Phần lớn tín hiệu lấy dấu vân tay mô tả phần cứng hoặc phần mềm của bạn. Network Information API mô tả một thứ hoàn toàn khác: chính kết nối đang tải trang — hạng tốc độ thô của nó, độ trễ khứ hồi đo được, và bạn có bật chế độ tiết kiệm dữ liệu cho trình duyệt hay không. Không cái nào trong số đó cần lời nhắc xin quyền, và trên engine trình duyệt đã triển khai API này, bất kỳ trang nào cũng đọc được nó ngay khi tải xong.
Tóm tắt nhanh
navigator.connectionđể lộeffectiveType,downlink,rttvàsaveDatahoàn toàn không cần lời nhắc quyền — bất kỳ script nào cũng có thể đọc hạng tốc độ thô của kết nối bạn ngay khi trang tải.- Các giá trị được cố tình gom vào nhóm (bucket) chứ không phải số thô, nhằm làm suy yếu khả năng lấy dấu vân tay — nhưng nhóm mà bạn rơi vào, khi kết hợp với hàng chục tín hiệu khác, vẫn bổ sung entropy đo được vào một dấu vân tay tổng hợp.
- Chỉ Chromium hỗ trợ. Chrome, Edge, Opera và Samsung Internet đều triển khai; Safari và Firefox không triển khai cả
NetworkInformationlẫnnavigator.connection. - Khoảng cách đó tự nó là một tín hiệu — một script có thể dùng chính sự có mặt hay vắng mặt của
navigator.connectionnhư một phép kiểm tra engine trình duyệt thô, khó giả mạo, độc lập với những gì chuỗi User-Agent tuyên bố. - Kiểm tra dấu vân tay của BrowserInsight báo cáo trình duyệt của chính bạn để lộ những thuộc tính mạng nào, cùng với mọi tín hiệu khác trong dấu vân tay của bạn.
navigator.connection: effectiveType, downlink, rtt, saveData
API này gắn một đối tượng NetworkInformation duy nhất vào navigator.connection. Ở nơi được triển khai, việc đọc chỉ cần một dòng và không cần bất kỳ tương tác nào của người dùng:
const conn = navigator.connection;
console.log(conn.effectiveType); // "4g", "3g", "2g", hoặc "slow-2g"
console.log(conn.downlink); // băng thông ước tính (Mbps), làm tròn đến 25 kbps gần nhất rồi gom nhóm
console.log(conn.rtt); // độ trễ khứ hồi ước tính (ms), làm tròn đến 25ms gần nhất rồi gom nhóm
console.log(conn.saveData); // true nếu người dùng đã bật chế độ Tiết kiệm dữ liệu
Bốn thuộc tính đảm nhiệm việc này. effectiveType là cách trình duyệt tự phân loại kết nối của bạn vào một trong bốn nhóm thế hệ — slow-2g, 2g, 3g, hoặc 4g — dựa trên các giá trị rtt và downlink quan sát được gần đây, chứ không dựa trên công nghệ vô tuyến thực tế đang dùng; một đường Wi-Fi bị giới hạn tốc độ vẫn có thể đọc ra "3g" như thường. downlink là băng thông hiệu dụng ước tính, còn rtt là độ trễ khứ hồi ước tính đến máy chủ hiện tại — cả hai đều dựng từ các lần truyền tải mạng gần đây thực sự của trình duyệt, không phải một phép đo mới chạy riêng cho trang này. saveData đơn giản phản ánh việc người dùng có bật chế độ "Tiết kiệm dữ liệu" ở cấp hệ điều hành hay trình duyệt hay không. Một số bản dựng Chromium còn để lộ trường type (wifi, cellular, ethernet, bluetooth, none, hoặc unknown), dù mức độ khả dụng của nó thay đổi theo nền tảng.
Lập hồ sơ thô và entropy
Các tác giả của đặc tả nói rõ rằng những con số băng thông và độ trễ thô, liên tục cập nhật, tự chúng sẽ là một vector lấy dấu vân tay mạnh — một chỉ số thông lượng thời gian thực gần như là duy nhất cho một tuyến mạng cụ thể tại một thời điểm nhất định. Đó là lý do vì sao downlink và rtt được làm tròn và gom nhóm thay vì báo cáo ở độ chính xác đầy đủ, và vì sao effectiveType gói gọn mọi thứ vào chỉ bốn cấp thô. Đây là một biện pháp giảm thiểu thực sự, không phải chỉ mang tính hình thức.
Tuy vậy nó không đưa đóng góp về 0. Bốn nhóm effectiveType, một nhóm rtt, một nhóm downlink, cùng cờ boolean saveData kết hợp lại vẫn tạo ra một số trạng thái phân biệt được ở mức khiêm tốn — nhỏ hơn nhiều so với hash canvas, nhưng không phải là không đáng kể khi được gộp vào một dấu vân tay tổng hợp cùng với kích thước màn hình, phông chữ và đầu ra WebGL. Nơi nó thực sự có giá trị như một tín hiệu theo dõi không nằm ở entropy thô mà ở tính ổn định và khả năng liên kết giữa các ngữ cảnh: cùng một đường truyền vật lý thường báo cùng một nhóm effectiveType/rtt trên các trang khác nhau và thậm chí các tab khác nhau mở gần cùng thời điểm, cho trình theo dõi một manh mối yếu nhưng miễn phí rằng hai phiên có thể chung một mạng — hữu ích để liên kết hoạt động giữa các nguồn gốc ngay cả khi cookie và bộ nhớ đã được phân vùng theo từng trang. Đây cũng là một phép kiểm tra tính hợp lý: một phiên tự nhận là dùng kết nối di động "4g" nhưng RTT dưới 20ms đến một điểm cuối ISP dân dụng thì đọc lên có vẻ mâu thuẫn, giống như kỹ thuật không khớp giữa định vị IP và múi giờ đánh cờ dựa vào mâu thuẫn giữa các tín hiệu độc lập chứ không dựa vào một tín hiệu đơn lẻ.
Chỉ Chromium hỗ trợ tự nó đã là một tín hiệu
Độ phủ của API này là phần dễ bị bỏ qua nhất. Bảng tương thích trên caniuse.com cho thấy mức hỗ trợ toàn cầu nằm khoảng 75–80% — không phải vì đây là một tính năng ngách hay thử nghiệm, mà vì nó đã có mặt trong mọi trình duyệt nền Chromium và không có trong bất kỳ trình duyệt nào khác. Safari chưa bao giờ triển khai NetworkInformation; Firefox từng thử một phiên bản sớm sau cờ tính năng nhiều năm trước rồi gỡ bỏ nó — cả hai trình duyệt này hôm nay đều không để lộ navigator.connection. Kho lưu trữ đặc tả WICG định nghĩa API này vốn được đặt dưới Web Incubator Community Group, vốn có quan hệ gần gũi với Chromium, và việc áp dụng bên ngoài hệ sinh thái đó chưa bao giờ thực sự diễn ra.
Sự bất đối xứng đó hữu ích chính xác vì nó không phụ thuộc vào việc script đọc được gì từ giá trị của kết nối — nó chỉ phụ thuộc vào việc navigator.connection có tồn tại hay không. Một trang có thể kiểm tra 'connection' in navigator như một tín hiệu gần như tức thì, không cần quyền, thu hẹp engine trình duyệt xuống "một bản dựng Chromium nào đó" so với "không phải Chromium", độc lập với những gì chuỗi User-Agent hay User-Agent Client Hints tuyên bố. Điều đó khiến nó trở thành một phép đối chiếu nhỏ nhưng thực sự hữu ích, cùng họ với lấy dấu vân tay ngăn xếp TCP/IP hay lấy dấu vân tay TLS: các tín hiệu khó giả mạo một cách thuyết phục vì để làm vậy phải hoặc thực sự chạy engine thật bên dưới, hoặc phải cẩn thận tái tạo một hành vi mà hầu hết công cụ giả mạo còn chẳng buồn động tới. Một công cụ giả mạo chuỗi UA tự nhận là Safari nhưng navigator.connection vẫn phân giải ra một đối tượng thật thì đang âm thầm tự mâu thuẫn với chính nó.
Cân nhắc về quyền riêng tư
Tín hiệu này không đòi hỏi các biện pháp phòng vệ quyết liệt như lấy dấu vân tay canvas hay WebGL, phần lớn vì thiết kế của chính API đã giới hạn rủi ro sẵn:
- Việc gom nhóm thực sự có tác dụng. Vì
downlinkvàrttđã được làm tròn và lượng tử hóa thay vì để thô, việc bạn tự tìm cách che giấu thêm chúng cũng không mang lại nhiều bảo vệ bổ sung — đặc tả đã thu gọn sẵn phiên bản độ phân giải cao của tín hiệu này, vốn là phần đáng lo nhất. - Các trình duyệt chú trọng quyền riêng tư đã loại bỏ hẳn bề mặt này. Vì Firefox và Safari không triển khai API này chút nào, dùng một trong hai trình duyệt đó sẽ loại bỏ hoàn toàn vector này — không cần cấu hình gì cả.
- Người dùng Chromium có ít quyền kiểm soát trực tiếp hơn. Không có công tắc hiển thị cho người dùng để ẩn
navigator.connectionkhỏi các trang theo cách có với quyền camera hay định vị, vì API này ngay từ đầu chưa bao giờ được đặt sau một mô hình quyền — nó được thiết kế đủ ít rủi ro để không cần một cổng cấp quyền như vậy. - Hãy xem nó là một trong nhiều tín hiệu yếu. Kết hợp với hình học màn hình, phông chữ và WebGL, nó chỉ là một phần gia tăng nhỏ trong một dấu vân tay rộng hơn — đáng biết, nhưng không đáng để lo lắng riêng về nó.
- Kiểm tra xem thiết lập của bạn để lộ những gì. Kiểm tra dấu vân tay của BrowserInsight cho biết
navigator.connectioncó tồn tại trong trình duyệt hiện tại của bạn hay không, nó báo cáo gì, cùng phần còn lại của tập tín hiệu bạn đang để lộ.
Câu hỏi thường gặp
Network Information API có cần lời nhắc xin quyền không?
Không. Ở nơi được hỗ trợ, navigator.connection và các thuộc tính của nó có thể được bất kỳ script nào đọc khi trang tải, không cần cử chỉ người dùng, hộp thoại, hay cấp quyền nào — khác với truy cập định vị hay camera.
Một trang web có lấy được tốc độ internet chính xác của tôi qua API này không?
Không, không chính xác được. downlink và rtt bị đặc tả cố tình làm tròn và gom nhóm, còn effectiveType chỉ báo cáo một trong bốn cấp thế hệ thô. Bạn sẽ nhận được một hạng kết nối tương đối, chứ không phải một phép đo cấp độ chính xác của bài kiểm tra tốc độ — để có mức đó, một trang web cần thực sự truyền dữ liệu và đo thời gian, giống như bài kiểm tra tốc độ mạng của BrowserInsight làm.
Vì sao Firefox và Safari không hỗ trợ API này?
Cả hai trình duyệt đơn giản là chưa từng phát hành nó như một tính năng ổn định; Firefox từng thử một phiên bản sớm sau cờ tính năng rồi gỡ bỏ. Hỗ trợ hiện nay chỉ giới hạn ở các trình duyệt nền Chromium — bao gồm Chrome, Edge, Opera và Samsung Internet — điều này cũng được ghi nhận trên caniuse.com.
Tôi có thể chặn tín hiệu này bằng tiện ích mở rộng trình duyệt không?
Gián tiếp thì có — một tiện ích chặn thực thi JavaScript hoặc gỡ bỏ navigator.connection trước khi script trang chạy sẽ đóng được nó, nhưng không có tiện ích mở rộng chuyên dụng, được dùng rộng rãi nào riêng cho API này, vì đóng góp của nó nhỏ so với các tín hiệu canvas, WebGL và phông chữ. Dùng Firefox hoặc Safari loại bỏ tín hiệu này mà không cần bất kỳ tiện ích nào.
Kết luận
Network Information API là một ví dụ tốt cho một tín hiệu lấy dấu vân tay được thiết kế nhỏ ngay từ đầu nhưng vẫn đáng để hiểu rõ. Các tác giả của nó rõ ràng đã lường trước rủi ro và gom nhóm các giá trị để làm suy yếu nó, nên riêng navigator.connection sẽ không nhận diện được bạn. Điều nó bổ sung là một manh mối ổn định thô giữa các ngữ cảnh, chồng lên một dấu vân tay tổng hợp lớn hơn nhiều — và, quan trọng không kém, một phép kiểm tra miễn phí, khó giả mạo về engine trình duyệt bạn thực sự đang chạy, vì chỉ Chromium mới triển khai đầy đủ nó. Không điều nào trong hai điều đó đòi hỏi một biện pháp phòng vệ đặc biệt: nó phần lớn được xử lý kèm theo bất cứ điều gì bạn đã làm để quản lý phần còn lại của dấu vân tay trình duyệt của mình.
Đọc thêm:


