Chrome имеет общественное намерение отказаться от таких мощных функций, как геолокация в незащищенных источниках, и мы надеемся, что другие последуют этому примеру.

Начиная с Chrome 50, Chrome больше не поддерживает получение местоположения пользователя с помощью API геолокации HTML5 со страниц, доставленных по незащищенным соединениям. Это означает, что страница, которая выполняет вызов API геолокации, должна обслуживаться из безопасного контекста, такого как HTTPS.

Это важная проблема, поскольку она напрямую повлияет на любой сайт, который требует использования API геолокации и обслуживается через https, но это изменение, которое мы действительно считаем полезным для всех пользователей Интернета. Этот пост должен помочь вам понять причины и дальнейшие действия.

Когда это изменится?

Это изменение вступает в силу с Chrome версии 50 (12:00 по тихоокеанскому стандартному времени, 20 апреля 2016 г.).

Консоль инструментов разработчика Chrome выдает предупреждения, начиная с версии 44 (выпущенной 21 июля 2015 г.).
Был опубликован ряд публичных объявлений, в которых описывается обоснование (и обсуждение) того, почему мы вносим это изменение:

Об этом свидетельствует и ряд других источников: Mobiforge (26 января 2016 г.), Wired (17 марта 2016 г.), VentureBeat (13 апреля 2016 г.).

Почему мы вносим это изменение?

Местоположение - это конфиденциальные данные! Требование HTTPS необходимо для защиты конфиденциальности данных о местоположении ваших пользователей. Если местоположение пользователя доступно из незащищенного контекста, злоумышленники в сети смогут узнать, где находится этот пользователь. Это серьезно ставит под угрозу конфиденциальность пользователей.

На кого это влияет?

Это влияет на любую страницу, в настоящее время использующую API геолокации со страниц, обслуживаемых через HTTP (небезопасно). Это также влияет на окна iframe HTTPS, которые используют API геолокации, если они встроены в страницы HTTP. (Вы не сможете выполнять полифилы, используя общий фрейм, доставляемый по HTTPS.)

Требуется ли протокол HTTPS для всего моего веб-приложения?

Для использования геолокации не требование, чтобы все приложение обслуживалось через HTTPS. Только страницы, использующие геолокацию, должны обслуживаться в безопасном контексте. В настоящее время безопасный контекст - это все, что размещено на верхнем уровне HTTPS или localhost. Например, iframe, который указывает на безопасный источник, но размещен в незащищенном источнике (http: //paul.kinlan.me/), не сможет вызывать API геолокации.

Мы настоятельно рекомендуем вам перейти на HTTPS, поскольку новые и существующие мощные функции браузера требуют безопасного происхождения.

Влияет ли это на местное развитие?

Этого не должно быть, localhost был объявлен в спецификации «потенциально безопасным», и в нашем случае запросы на геолокацию, обслуживаемые на верхнем уровне через localhost, по-прежнему будут работать.

Могу ли я определить во время выполнения, что геолокация была заблокирована из-за небезопасного контекста

да. Спецификация геолокации определяет объект PositionError, который передается в обратный вызов отказа API геолокации. Объект определяет код и свойства сообщения.

Ошибки из-за этой проблемы с безопасным контекстом вернут код 1, который является «Ошибка отказа в разрешении». Вы можете получить эту ошибку, когда пользователь отказал в доступе или система запретила доступ к местоположениям пользователя. Это означает, что вам нужно будет проверить сообщение, чтобы узнать точную причину.

Это может быть довольно хрупким, поскольку это может измениться в будущем, но сильным сигналом того, что это была проблема небезопасного содержимого, является поиск строки «Разрешены только безопасные источники».

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

Помните, что вы не можете просто проверить происхождение страницы, потому что ваша страница может быть на https, но внутри iframe, размещенного из небезопасного контекста.

Мне действительно нужно использовать геолокацию. Что мне делать?

Если вы хотите использовать API геолокации HTML5 или если ваш сайт уже использует API геолокации, пожалуйста перенесите вызовы API геолокации на HTTPS, убедившись, что они используются в безопасном контексте.

Существует ряд альтернативных вариантов, доступных для получения местоположения пользователя, на которое не влияет это изменение, таких как API геолокации Google Maps, GeoIP (например, есть другие решения на основе географии) и пользовательский введен почтовый индекс. Однако мы настоятельно рекомендуем, что лучший способ обеспечить постоянный доступ к геолокации - это перейти на HTTPS.

Первоначально опубликовано на сайте developers.google.com Полом Кинланом