API геолокации удален из незащищенных источников в Chrome 50

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

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

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

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

Это изменение вступает в силу начиная с Chrome 50 (20: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 или локальному хосту. Например, iframe , который указывает на безопасный источник, но размещен в незащищенном источнике ( http://paul.kinlan.me/ ) , не сможет вызывать API геолокации.

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

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

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

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

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

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

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

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

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

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

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

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