Se quitó la API de Geolocation de orígenes no seguros en Chrome 50

Chrome tiene la intención pública de dar de baja funciones potentes, como la ubicación geográfica en orígenes no seguros, y esperamos que otros lo sigan.

A partir de Chrome 50, Chrome ya no admite obtener la ubicación del usuario con la API de Geolocation de HTML5 desde páginas que se entregan a través de conexiones no seguras. Esto significa que la página que realiza la llamada a la API de Geolocation debe publicarse desde un contexto seguro, como HTTPS.

Es un problema importante, ya que afectará directamente a cualquier sitio que requiera el uso de la API de geolocalización y que no se publique a través de HTTPS, pero es un cambio que creemos que es beneficioso para todos los usuarios de la Web. Esta publicación debería ayudarte a comprender el razonamiento y cómo proceder.

¿Cuándo ocurrirá el cambio?

Este cambio entró en vigencia a partir de Chrome 50 (12 p.m. PST, 20 de abril de 2016).

La consola de herramientas para desarrolladores de Chrome proporciona advertencias desde la versión 44 (lanzada el 21 de julio de 2015).
Se realizaron varios anuncios públicos en los que se describe el motivo (y el debate) por el que realizamos este cambio:

Hay varias otras fuentes que lo destacan: Mobiforge (26 de enero de 2016), Wired (17 de marzo de 2016) y VentureBeat (13 de abril de 2016).

¿A qué se debe este cambio?

La ubicación es un dato sensible. Es obligatorio requerir HTTPS para proteger la privacidad de los datos de ubicación de los usuarios. Si la ubicación del usuario está disponible desde un contexto no seguro, los atacantes de la red podrán saber dónde está. Esto compromete seriamente la privacidad del usuario.

¿A quién afecta esto?

Esto afecta a cualquier página que actualmente use la API de Geolocation desde páginas publicadas a través de HTTP (no seguro). También afecta a los iframes HTTPS que usan la API de Geolocation si están incorporados en páginas HTTP. (No podrás usar la función de polyfill con un marco compartido que se entrega a través de HTTPS).

¿Toda mi app web necesita HTTPS?

No es un requisito que toda la app se publique a través de HTTPS para usar la geolocalización. Solo las páginas que usan la geolocalización deben publicarse en un contexto seguro. Actualmente, un contexto seguro es cualquier elemento alojado en el nivel superior en HTTPS o localhost. Por ejemplo, un iframe que apunte a un origen seguro, pero que se aloje en un origen no seguro (http ://paul.kinlan.me/) no podría llamar a la API de ubicación geográfica.

Te recomendamos que migres a HTTPS, ya que las funciones nuevas y existentes del navegador requieren orígenes seguros.

¿Esto afecta el desarrollo local?

No debería, ya que localhost se declaró como "potencialmente seguro" en la especificación y, en nuestro caso, las solicitudes de geolocalización que se entregan en el nivel superior a través de localhost seguirán funcionando.

¿Puedo detectar en el tiempo de ejecución si la geolocalización se bloqueó porque no se encuentra en un contexto seguro?

Sí. La especificación de geolocalización define un objeto PositionError que se pasa a la devolución de llamada de error de las APIs de Geolocation. El objeto define propiedades code y message.

Los errores debidos a este problema de contexto seguro mostrarán un code de 1, que es un "error de permiso denegado". Puedes obtener este error cuando un usuario deniega el acceso o el sistema lo hace a sus ubicaciones. Esto significa que deberás revisar el mensaje para ver cuál es el motivo exacto.

Esto puede ser bastante inestable, ya que podría cambiar en el futuro, pero un indicador claro de que se trata de un problema de contenido no seguro es buscar la cadena "Solo se permiten orígenes seguros".

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

Recuerda que no puedes solo verificar el origen de la página porque podría estar en HTTPS, pero dentro de un iframe alojado desde un contexto no seguro.

Realmente necesito usar la ubicación geográfica. ¿Qué debo hacer?

Si deseas usar la API de Geolocation HTML5 o si tu sitio ya la usa, migra las páginas que realizan llamadas a la API de Geolocation a HTTPS y asegúrate de que se usen en un contexto seguro.

Hay varias opciones de resguardo disponibles para obtener la ubicación de un usuario que no se ven afectadas por este cambio, como la API de Google Maps Geolocation, GeoIP (como ejemplo, hay otras soluciones basadas en la ubicación geográfica) y un código postal ingresado por el usuario. Sin embargo, te recomendamos que la mejor manera de garantizar el acceso continuo a la geolocalización sea migrar a HTTPS.