Geolocation API dihapus dari origin yang tidak aman di Chrome 50

Chrome bertujuan publik untuk menghentikan penggunaan fitur canggih seperti geolokasi pada asal yang tidak aman, dan kami berharap fitur lain akan mengikutinya.

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

Hal ini merupakan masalah penting karena akan langsung berdampak pada situs yang memerlukan penggunaan API geolokasi dan tidak ditayangkan melalui https, tetapi ini merupakan perubahan yang kami percaya bermanfaat bagi semua pengguna di web. Postingan ini akan membantu Anda memahami alasannya dan cara melanjutkan.

Kapan nama fitur ini akan berubah?

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

Konsol developer tools 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 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. Ini sangat membahayakan privasi pengguna.

Siapa yang akan terpengaruh?

Hal ini memengaruhi halaman mana pun yang saat ini menggunakan Geolocation API dari halaman yang ditampilkan melalui HTTP (tidak aman). Kebijakan ini juga memengaruhi iframe HTTPS yang menggunakan Geolocation API jika disematkan di halaman HTTP. (Anda tidak akan dapat mem-polyfill menggunakan frame yang dikirimkan HTTPS bersama.)

Apakah seluruh aplikasi web saya memerlukan HTTPS?

Penggunaan Geolokasi bukan persyaratan bahwa seluruh aplikasi ditayangkan melalui HTTPS. Hanya halaman yang menggunakan Geolokasi yang harus 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 asal yang aman namun dihosting di asal yang tidak aman (http ://paul.kinlan.me/) tidak akan diizinkan untuk memanggil API geolokasi.

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

Apakah ini memengaruhi pengembangan lokal?

Seharusnya tidak, localhost telah dideklarasikan sebagai "berpotensi aman" dalam spesifikasi dan dalam kasus ini, permintaan geolokasi yang dilayani 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 dari 1 yang merupakan "Error Izin Ditolak". Anda dapat memperoleh error ini saat pengguna menolak akses atau sistem menolak akses ke lokasi pengguna. Artinya, Anda harus memeriksa pesan untuk melihat alasan tepatnya.

Ini bisa menjadi cukup rapuh karena mungkin berubah di masa mendatang, tetapi sinyal kuat bahwa ini adalah masalah konten yang tidak aman adalah dengan mencari string "Only safe origin 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 tersebut mungkin berada di https, tetapi juga 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 API Geolokasi HTML5, atau jika situs Anda sudah menggunakan API Geolokasi, migrasikan halaman yang melakukan panggilan Geolocation API ke HTTPS, pastikan halaman tersebut digunakan dalam konteks yang aman.

Ada sejumlah opsi penggantian yang tersedia untuk mendapatkan lokasi pengguna yang tidak terpengaruh oleh perubahan ini, seperti Google Maps Geolocation API, GeoIP (sebagai contoh, ada solusi berbasis geografis lainnya), dan kode pos yang dimasukkan pengguna. Namun, kami sangat menyarankan jalur terbaik untuk memastikan akses berkelanjutan ke geolokasi adalah berpindah ke HTTPS.