Chrome có ý định công khai để ngừng sử dụng các tính năng mạnh mẽ như vị trí địa lý trên các nguồn gốc không an toàn và chúng tôi mong rằng các trình duyệt khác cũng sẽ làm như vậy.
Kể từ Chrome 50, Chrome không còn hỗ trợ thu thập thông tin vị trí của người dùng bằng API Vị trí địa lý HTML5 từ các trang được phân phối qua kết nối không an toàn. Điều này có nghĩa là trang thực hiện lệnh gọi API Vị trí địa lý phải được phân phát từ một ngữ cảnh bảo mật, chẳng hạn như HTTPS.
Đây là một vấn đề quan trọng vì sẽ ảnh hưởng trực tiếp đến mọi trang web yêu cầu sử dụng API vị trí địa lý và không được phân phát qua https. Tuy nhiên, đây là thay đổi mà chúng tôi tin là sẽ mang lại lợi ích cho tất cả người dùng trên web. Bài đăng này sẽ giúp bạn hiểu lý do và cách tiếp tục.
Khi nào việc đổi tên diễn ra?
Thay đổi này có hiệu lực kể từ Chrome 50 (12 giờ trưa theo giờ Thái Bình Dương, ngày 20 tháng 4 năm 2016).
Bảng điều khiển công cụ dành cho nhà phát triển của Chrome đã đưa ra cảnh báo kể từ phiên bản 44 (phát hành ngày 21 tháng 7 năm 2015).
Chúng tôi đã đưa ra một số thông báo công khai mô tả lý do (và nội dung thảo luận) về việc chúng tôi thực hiện thay đổi này:
- Ý định ngừng sử dụng một bộ tính năng mạnh mẽ qua HTTP (Tháng 2 năm 2015)
- Ý định ngừng sử dụng Geolocation API qua HTTP (Tháng 11 năm 2015)
- Hội nghị nhà phát triển Chrome (Tháng 11 năm 2016)
- Blog phát hành Kênh thử nghiệm Beta của Chrome (Ngày 17 tháng 3 năm 2016)
- Trang web Trạng thái của Chrome
Có một số nguồn khác đã nêu bật điều này: Mobiforge (ngày 26 tháng 1 năm 2016), Wired (ngày 17 tháng 3 năm 2016), VentureBeat (ngày 13 tháng 4 năm 2016).
Tại sao chúng tôi thực hiện thay đổi này?
Vị trí là dữ liệu nhạy cảm! Bạn phải yêu cầu sử dụng giao thức HTTPS để bảo vệ quyền riêng tư của dữ liệu vị trí của người dùng. Nếu có thể truy cập thông tin vị trí của người dùng từ một ngữ cảnh không an toàn, thì kẻ tấn công trên mạng sẽ có thể biết vị trí của người dùng đó. Điều này gây tổn hại nghiêm trọng đến quyền riêng tư của người dùng.
Điều này ảnh hưởng đến ai?
Điều này ảnh hưởng đến mọi trang hiện đang sử dụng API vị trí địa lý từ các trang được phân phát qua HTTP (không an toàn). Điều này cũng ảnh hưởng đến các iframe HTTPS sử dụng API Vị trí địa lý nếu các iframe đó được nhúng trong các trang HTTP. (Bạn sẽ không thể tạo polyfill bằng khung được phân phối qua HTTPS dùng chung.)
Toàn bộ ứng dụng web của tôi có cần HTTPS không?
Bạn không bắt buộc phải phân phát toàn bộ ứng dụng qua HTTPS để sử dụng tính năng Định vị địa lý. Chỉ những trang sử dụng tính năng Xác định vị trí địa lý mới cần được phân phát trong một ngữ cảnh bảo mật. Hiện tại, ngữ cảnh bảo mật là mọi nội dung được lưu trữ ở cấp cao nhất trên HTTPS hoặc localhost. Ví dụ: một iframe trỏ đến một nguồn gốc bảo mật nhưng được lưu trữ trên nguồn gốc không bảo mật (http ://paul.kinlan.me/) sẽ không được phép gọi API vị trí địa lý.
Bạn nên di chuyển sang HTTPS vì các tính năng trình duyệt mới và hiện có mạnh mẽ yêu cầu nguồn gốc an toàn.
Điều này có ảnh hưởng đến hoạt động phát triển cục bộ không?
Không, localhost đã được khai báo là "có thể an toàn" trong thông số kỹ thuật và trong trường hợp của chúng ta, các yêu cầu vị trí địa lý được phân phát ở cấp cao nhất qua localhost sẽ vẫn hoạt động.
Tôi có thể phát hiện trong thời gian chạy nếu thông tin vị trí địa lý bị chặn do không nằm trong ngữ cảnh an toàn không
Có. Thông số kỹ thuật vị trí địa lý xác định đối tượng PositionError được truyền vào lệnh gọi lại lỗi của API Vị trí địa lý. Đối tượng này xác định các thuộc tính code
và message
.
Lỗi do vấn đề về ngữ cảnh bảo mật này sẽ trả về code
là 1, tức là "Lỗi từ chối cấp quyền".
Bạn có thể gặp lỗi này khi người dùng từ chối cấp quyền truy cập hoặc hệ thống từ chối cấp quyền truy cập vào vị trí của người dùng. Điều này có nghĩa là bạn sẽ phải kiểm tra thư để biết lý do chính xác.
Điều này có thể khá dễ hỏng vì có thể thay đổi trong tương lai, nhưng một tín hiệu rõ ràng cho thấy đó là vấn đề về nội dung không an toàn là tìm chuỗi "Chỉ cho phép nguồn gốc an toàn".
navigator.geolocation.getCurrentPosition(success => {
/* Do some magic. */
}, failure => {
if (failure.message.startsWith("Only secure origins are allowed")) {
// Secure Origin issue.
}
});
Hãy nhớ rằng bạn không thể chỉ kiểm tra nguồn gốc của trang vì trang của bạn có thể đang ở https nhưng bên trong một iframe được lưu trữ từ một ngữ cảnh không an toàn.
Tôi thực sự cần sử dụng tính năng Xác định vị trí địa lý; Tôi nên làm gì?
Nếu bạn muốn sử dụng API Vị trí địa lý HTML5 hoặc nếu trang web của bạn đã sử dụng API Vị trí địa lý, vui lòng di chuyển các trang thực hiện lệnh gọi API Vị trí địa lý sang HTTPS, đảm bảo rằng các trang đó được sử dụng trong một ngữ cảnh an toàn.
Có một số tuỳ chọn dự phòng để lấy thông tin vị trí của người dùng không bị thay đổi này ảnh hưởng, chẳng hạn như API Định vị địa lý của Google Maps, GeoIP (ví dụ: có các giải pháp khác dựa trên vị trí địa lý) và mã zip do người dùng nhập. Tuy nhiên, bạn nên chuyển sang HTTPS để đảm bảo quyền truy cập liên tục vào thông tin vị trí địa lý.