Geolocation API dihapus dari origin yang tidak aman di Chrome 50

Chrome memiliki niat publik untuk menghentikan penggunaan fitur canggih seperti geolokasi pada origin yang tidak aman, dan kami berharap bahwa browser lain akan mengikutinya.

Mulai Chrome 50, Chrome tidak lagi mendukung mendapatkan lokasi pengguna menggunakan Geolocation API HTML5 dari halaman yang dikirimkan oleh koneksi yang tidak aman. Artinya, halaman yang melakukan panggilan Geolocation API harus ditayangkan dari konteks aman seperti HTTPS.

Ini adalah masalah penting karena akan secara langsung memengaruhi situs apa pun yang memerlukan penggunaan geolocation API dan tidak ditayangkan melalui https, tetapi ini adalah perubahan yang kami percaya bermanfaat bagi semua pengguna di web. Postingan ini akan membantu Anda memahami alasan dan cara melanjutkannya.

Kapan nama fitur ini akan berubah?

Perubahan ini berlaku mulai Chrome 50 (12.00 PST, 20 April 2016).

Konsol alat developer Chrome telah memberikan peringatan sejak versi 44 (dirilis 21 Juli 2015).
Ada sejumlah pengumuman publik yang menjelaskan alasan (dan diskusi) mengapa kami melakukan perubahan ini:

Ada sejumlah sumber lain yang telah menyoroti hal ini: Mobiforge (26 Januari 2016), Wired (17 Maret 2016), VentureBeat (13 April 2016).

Mengapa kami melakukan perubahan ini?

Lokasi adalah data sensitif. Mewajibkan HTTPS diperlukan untuk melindungi privasi data lokasi pengguna Anda. Jika lokasi pengguna tersedia dari konteks yang tidak aman, penyerang di jaringan akan dapat mengetahui lokasi pengguna tersebut. Hal ini sangat membahayakan privasi pengguna.

Siapa yang akan terpengaruh?

Hal ini memengaruhi halaman yang saat ini menggunakan Geolocation API dari halaman yang ditayangkan melalui HTTP (tidak aman). Hal ini juga memengaruhi iframe HTTPS yang menggunakan Geolocation API jika disematkan di halaman HTTP. (Anda tidak akan dapat melakukan polyfill menggunakan frame yang dikirimkan HTTPS bersama.)

Apakah seluruh aplikasi web saya memerlukan HTTPS?

Seluruh aplikasi tidak harus ditayangkan melalui HTTPS untuk menggunakan Geolokasi. Hanya halaman yang menggunakan Geolokasi yang perlu ditayangkan melalui konteks yang aman. Konteks aman saat ini adalah apa pun yang dihosting di tingkat teratas di HTTPS atau localhost. Misalnya, iframe yang mengarah ke origin aman, tetapi dihosting di origin yang tidak aman (http ://paul.kinlan.me/) tidak akan diizinkan untuk memanggil geolocation API.

Sebaiknya Anda bermigrasi ke HTTPS karena fitur browser baru dan lama yang canggih memerlukan origin yang aman.

Apakah hal ini memengaruhi pengembangan lokal?

Tidak seharusnya demikian, localhost telah dideklarasikan sebagai "berpotensi aman" dalam spesifikasi, dan dalam kasus kami, permintaan geolokasi yang ditayangkan di tingkat teratas melalui localhost akan tetap berfungsi.

Dapatkah saya mendeteksi saat runtime jika geolokasi diblokir karena tidak berada dalam konteks yang aman

Ya. Spesifikasi geolokasi menentukan objek PositionError yang diteruskan ke callback kegagalan Geolocation API. Objek ini menentukan properti code dan message.

Error karena masalah konteks aman ini akan menampilkan code 1 yang merupakan "Error Izin Ditolak". Anda bisa mendapatkan error ini saat pengguna menolak akses atau sistem menolak akses ke lokasi pengguna. Artinya, Anda harus memeriksa pesan untuk mengetahui alasan pastinya.

Hal ini dapat menjadi cukup rapuh karena dapat berubah di masa mendatang, tetapi sinyal kuat bahwa masalahnya adalah konten tidak aman adalah dengan mencari string "Only secure origins are allowed".

navigator.geolocation.getCurrentPosition(success => {
    /* Do some magic. */
}, failure => {
    if (failure.message.startsWith("Only secure origins are allowed")) {
    // Secure Origin issue.
    }
});

Ingat, Anda tidak dapat hanya memeriksa asal halaman karena halaman Anda mungkin berada di https, tetapi di dalam iframe yang dihosting dari konteks yang tidak aman.

Saya benar-benar perlu menggunakan Geolokasi; Apa yang harus saya lakukan?

Jika Anda ingin menggunakan Geolocation API HTML5, atau jika situs Anda sudah menggunakan Geolocation API, migrasikan halaman yang melakukan panggilan Geolocation API ke HTTPS, untuk memastikan bahwa halaman tersebut digunakan dalam konteks yang aman.

Ada sejumlah opsi penggantian yang tersedia untuk mendapatkan lokasi pengguna yang tidak terpengaruh oleh perubahan ini, seperti API Geolokasi Google Maps, GeoIP (misalnya, ada solusi berbasis geo lainnya), dan kode pos yang dimasukkan pengguna. Namun, kami sangat merekomendasikan bahwa jalur terbaik untuk memastikan akses berkelanjutan ke geolokasi adalah beralih ke HTTPS.