O Chrome tem a intenção pública de descontinuar recursos poderosos, como a geolocalização em origens não seguras, e esperamos que outros sigam o exemplo.
A partir do Chrome 50, o Chrome não oferece mais suporte para obter a localização do usuário usando a API Geolocation do HTML5 em páginas transmitidas por conexões não seguras. Isso significa que a página que está fazendo a chamada da API Geolocation precisa ser veiculada em um contexto seguro, como HTTPS.
Esse é um problema importante, porque vai afetar diretamente qualquer site que exija o uso da API de geolocalização e não seja veiculado por https. No entanto, essa é uma mudança que acreditamos ser benéfica para todos os usuários na Web. Esta postagem vai ajudar você a entender o raciocínio e como proceder.
Quando a mudança acontecerá?
Essa mudança entrou em vigor no Chrome 50 (12h PST, 20 de abril de 2016).
O console de ferramentas para desenvolvedores do Chrome vem fornecendo avisos desde a versão 44
(lançada em 21 de julho de 2015).
Vários anúncios públicos descrevem o motivo
(e a discussão) por trás dessa mudança:
- Intenção de descontinuar um conjunto de recursos poderosos por HTTP (fevereiro de 2015)
- Intenção de descontinuar a API Geolocation pelo HTTP (novembro de 2015, em inglês)
- Chrome Dev Summit (novembro de 2016)
- Blog de lançamento do canal Beta do Chrome (17 de março de 2016)
- Site do Status do Chrome
Várias outras fontes também destacaram isso: Mobiforge (26 de janeiro de 2016), Wired (17 de março de 2016), VentureBeat (13 de abril de 2016).
Por que fizemos essa mudança?
O local é um dado sensível. O uso do HTTPS é necessário para proteger a privacidade dos dados de localização dos usuários. Se a localização do usuário estiver disponível em um contexto não seguro, os invasores na rede vão saber onde ele está. Isso compromete seriamente a privacidade do usuário.
Quem será afetado com isso?
Isso afeta qualquer página que esteja usando a API Geolocation em páginas veiculadas por HTTP (não seguras). Isso também afeta os iframes HTTPS que usam a API Geolocation se eles estiverem incorporados em páginas HTTP. Não é possível usar um frame compartilhado entregue por HTTPS para polyfill.
Todo o app da Web precisa de HTTPS?
Não é necessário que todo o app seja veiculado por HTTPS para usar a geolocalização. Somente as páginas que usam a geolocalização precisam ser veiculadas em um contexto seguro. Atualmente, um contexto seguro é qualquer coisa hospedada no nível superior em HTTPS ou localhost. Por exemplo, um iframe que aponta para uma origem segura, mas é hospedado em uma origem não segura (http ://paul.kinlan.me/), não pode chamar a API de geolocalização.
É altamente recomendável migrar para HTTPS, já que recursos novos e antigos de navegadores exigem origens seguras.
Isso afeta o desenvolvimento local?
Não, o localhost foi declarado como "potencialmente seguro" na especificação. No nosso caso, as solicitações de geolocalização enviadas no nível superior pelo localhost ainda vão funcionar.
Posso detectar no momento da execução se a geolocalização foi bloqueada por não estar em um contexto seguro
Sim. A especificação de geolocalização define um objeto PositionError
que é transmitido para o callback de falha das APIs de geolocalização. O objeto
define as propriedades code
e message
.
Erros devido a esse problema de contexto seguro vão retornar um code
de 1, que é um "erro de permissão negada".
Esse erro pode ocorrer quando um usuário nega o acesso ou o sistema nega o acesso aos locais do usuário. Isso significa que você precisa verificar a mensagem para saber o motivo exato.
Isso pode ser bastante frágil, já que pode mudar no futuro, mas um indicador forte de que houve um problema de conteúdo não seguro é procurar a 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.
}
});
Não é possível verificar apenas a origem da página, porque ela pode estar em https, mas dentro de um iframe hospedado em um contexto não seguro.
Preciso usar a geolocalização. O que devo fazer?
Se você quiser usar a API Geolocation do HTML5 ou se o site já usa a API Geolocation, migre as páginas que fazem chamadas da API Geolocation para HTTPS, garantindo que elas sejam usadas em um contexto seguro.
Há várias opções de substituto disponíveis para conseguir a localização de um usuário que não são afetadas por essa mudança, como a API Google Maps Geolocation, o GeoIP (como exemplo, há outras soluções baseadas em geolocalização) e um CEP inserido pelo usuário. No entanto, recomendamos que a melhor forma de garantir o acesso contínuo à geolocalização seja migrar para o HTTPS.