O Chrome tem a intenção pública de suspender o uso de recursos avançados, como a geolocalização em origens não seguras, e esperamos que outros façam isso.
A partir do Chrome 50, não será mais possível encontrar o local do usuário usando a API HTML5 Geolocation em páginas fornecidas por conexões não seguras. Isso significa que a página que está fazendo a chamada da API Geolocation precisa ser veiculada de um contexto seguro, como HTTPS.
Essa é uma questão importante, pois impactará diretamente qualquer site que exija o uso da API de geolocalização e não seja veiculado por https, mas é 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 alteração entrou em vigor a partir do Chrome 50 (20 de abril de 2016, às 12h no horário do Pacífico).
O console de ferramentas para desenvolvedores do Chrome exibe avisos desde a versão 44
(lançada em 21 de julho de 2015).
Vários anúncios públicos descrevem a lógica (e a discussão) do motivo da mudança:
- Intenção de suspender o uso do conjunto de recursos avançados por HTTP (fevereiro de 2015, link em inglês).
- Intent para descontinuar a API Geolocation por HTTP (novembro de 2015)
- Chrome Dev Summit (novembro de 2016)
- Blog de lançamento do Canal Beta do Chrome (17 de março de 2016)
- Site Status do Chrome
Várias outras fontes 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?
A localização é um dado sensível. A exigência de HTTPS é necessária para proteger a privacidade dos dados de local dos usuários. Se a localização do usuário estiver disponível em um contexto não seguro, os invasores na rede poderão saber onde o usuário está, o que compromete seriamente a privacidade do usuário.
Quem será afetado com isso?
Isso afeta qualquer página que atualmente usa a API Geolocation em páginas veiculadas por HTTP (não seguras). Ela também afeta iframes HTTPS que usam a API Geolocation se estiverem incorporados em páginas HTTP. Não é possível fazer o polyfill usando um frame compartilhado fornecido por HTTPS.
Todo o meu app da Web precisa de HTTPS?
Não é um requisito que todo o app seja veiculado por HTTPS para usar a geolocalização. Somente páginas que usam 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 está hospedado em uma origem não segura (http ://paul.kinlan.me/), não pode chamar a API Geolocation.
Recomendamos que você migre para HTTPS, já que os recursos de navegadores novos e atuais exigem origens seguras.
Isso afeta o desenvolvimento local?
Não deve ser, porque o localhost foi declarado como "possivelmente seguro" na especificação e, em nosso caso, as solicitações de geolocalização exibidas no nível superior por localhost ainda funcionarão.
Posso detectar durante a 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 ao callback de falha das APIs de geolocalização. O objeto
define as propriedades code
e message
.
Os erros causados por esse problema de contexto seguro retornarão code
de 1, que é um "Erro de permissão negada".
Você pode receber esse erro quando um usuário negou o acesso ou o sistema negou acesso aos locais dele. Isso significa que você terá que verificar a mensagem para saber qual foi o motivo exato.
Isso pode ser instável, porque pode mudar no futuro, mas um forte sinal de que se trata de um problema de conteúdo não seguro é procurar a string "Somente origens seguras são permitidas".
navigator.geolocation.getCurrentPosition(success => {
/* Do some magic. */
}, failure => {
if (failure.message.startsWith("Only secure origins are allowed")) {
// Secure Origin issue.
}
});
Lembre-se de que não é possível apenas verificar a origem da página porque ela pode estar em https, mas em um iframe hospedado de um contexto não seguro.
Preciso usar a geolocalização. O que devo fazer?
Se você quiser usar a API HTML5 Geolocation ou se seu site já a utiliza, migre as páginas que fazem chamadas dessa API para HTTPS, garantindo que elas sejam usadas em um contexto seguro.
Há várias opções de substituição 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 (por exemplo, há outras soluções com base geográfica) e um CEP inserido pelo usuário. No entanto, é altamente recomendável que o melhor caminho para garantir o acesso contínuo à geolocalização é mudar para HTTPS.