getCurrentPosition() и watchPosition() устарели для небезопасных источников

Я получаю эту ошибку на своем веб-сайте, который запрашивает данные геолокации от пользователя:

getCurrentPosition() и watchPosition() устарели для небезопасных источников, и в будущем их поддержка будет прекращена. Вам следует подумать о переключении вашего приложения на безопасный источник, такой как HTTPS. См. см. gl/rStTGz для более подробной информации.

Я имею в виду, что это просто уведомление, а ссылка в Google просто говорит, что она устарела.

У меня нет планов переводить мой сайт на SSL... так есть ли альтернатива для кого-то вроде меня?


person Jason Axelrod    schedule 19.08.2015    source источник
comment
Будем надеяться, что они не отключат эту функцию без замены в будущем выпуске...   -  person Phung D. An    schedule 07.10.2015
comment
Они, вероятно, закроют эту функцию без замены в будущем выпуске. Именно поэтому они осуждают это сейчас. Quote мы планируем постепенно перевести эти функции только на безопасные   -  person MarkJ    schedule 16.03.2016


Ответы (11)


Нашел вероятный ответ в сообщениях /jstillwell здесь: https://github.com/stefanocudini/leaflet-gps/issues/15 в основном эта функция не будет поддерживаться (только в Chrome?) в будущем, а только для HTTP-сайтов. HTTPS по-прежнему будет в порядке, и нет планов по созданию эквивалентной замены для использования HTTP.

person kittimiyo    schedule 20.08.2015

Поскольку переход на HTTPS может быть болезненным или невозможным в зависимости от вашей архитектуры, я нашел обходное решение: вы можете использовать Карты Google. API геолокации. Хотя у него есть ограничения на использование, он выполняет свою работу. Вам понадобится ключ API браузера, поэтому не забудьте ограничить его использование именем хоста вашей страницы.

Я использую его как резервный метод для метода getCurrentPosition(), если он не работает. Это позволяет мне заставить его работать, пока я не перейду на HTTPS.

Вот JSFiddles:

  • HTTP: getCurrentPosition() завершится ошибкой и вернется к API.
  • HTTPS: getCurrentPosition() пройдет успешно
person gogson    schedule 17.05.2016
comment
Привет, можешь выложить пример, пожалуйста? Спасибо - person Patrick; 18.05.2016
comment
Я все еще буду получать предупреждающее сообщение, это нормально? - person Patrick; 19.05.2016
comment
Да, потому что скрипка использует API только тогда, когда геолокация браузера не работает (когда вы получаете предупреждение). - person gogson; 19.05.2016
comment
Спасибо @gogson за советы ;) - person Nicolas_LeBot; 14.08.2016
comment
Большое спасибо! - person TechnoCorner; 25.09.2016
comment
Обратите внимание, что в примере используется JQuery. - person handle; 01.05.2017
comment
Кроме того, API геолокации Google Maps не упоминает GPS, а скорее точки доступа к сети (Wi-Fi, сотовая связь) или геоинформацию IP в качестве запасного варианта. Так что кажется, что HTTPS сейчас необходим. - person handle; 02.05.2017
comment
Действительно, спасибо за точность. Вскоре нам всем нужно будет перейти на HTTPS из-за строгой политики Chrome. Чем скорее, тем лучше. - person gogson; 05.05.2017

Это только для теста, вы можете сделать это в Google Chrome: перейдите по адресу: chrome://flags/#unsafely-treat-insecure-origin-as-secure, то вы увидите: введите здесь описание изображения Введите адрес, который вы хотите разрешить, затем включите и перезапустите браузер.

person Archil Labadze    schedule 01.11.2019
comment
Это должно быть отмечено как правильный ответ. - person obe; 09.01.2021
comment
Работает как оберег! - person wajdi_jurry; 24.03.2021

да. Google Chrome устарел от этой функции в версии 50. Если вы попытались использовать ее в Chrome, возникнет ошибка:

getCurrentPosition() and watchPosition() are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins for more details.

Итак, вам нужно добавить SSL-сертификат. Ну, это единственный способ.

И теперь это довольно просто с помощью Let's Encrypt. Вот руководство.

И для целей тестирования вы можете попробовать это:

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

2. Вы можете запустить хром с флагом --unsafely-treat-insecure-origin-as-secure=http://example.com (заменив example.com на источник, который вы действительно хотите проверить), который будет обрабатывать этот источник как безопасный для этого сеанса. Обратите внимание, что вам также необходимо включить параметр --user-data-dir=/test/only/profile/dir, чтобы создать новый тестовый профиль, чтобы флаг работал.

Я думаю, что Firefox также ограничил доступ пользователя к запросам API GeoLocation от http. Вот журнал изменений webkit: https://trac.webkit.org/changeset/200686

person Asim K T    schedule 11.05.2016
comment
Я получаю информацию: вы используете неподдерживаемый флаг командной строки: --unsafely-treat-insecure-origin-as-secure. Стабильность и безопасность пострадают. Версия Chrome: 50.0.2661.102. Также не работает геолокация - person instead; 13.05.2016
comment
Убейте все экземпляры и повторите попытку. stackoverflow.com/questions/6918393/ - person Asim K T; 15.05.2016
comment
При тестировании вашего приложения в браузере Chrome просто измените URL-адрес приложения (обычно 192.xxx.xxx.xxx:3000) на localhost:3000. Вам нужно будет убедиться, что ваша медиа-политика поддерживает это, но вы не получите ошибка безопасности. - person MindWire; 03.03.2017

Для этого вы можете использовать API https://ipinfo.io (это мой сервис). Это бесплатно до 1000 запросов в день (с поддержкой SSL или без нее). Он дает вам координаты, имя и многое другое. Вот пример:

curl ipinfo.io
{
  "ip": "172.56.39.47",
  "hostname": "No Hostname",
  "city": "Oakland",
  "region": "California",
  "country": "US",
  "loc": "37.7350,-122.2088",
  "org": "AS21928 T-Mobile USA, Inc.",
  "postal": "94621"
}

Вот пример, который создает объект координат с ответом API, который соответствует тому, что вы получаете от getCurrentPosition():

$.getJSON('https://ipinfo.io/geo', function(response) { 
    var loc = response.loc.split(',');
    var coords = {
        latitude: loc[0],
        longitude: loc[1]
    };
});

А вот подробный пример, который показывает, как вы можете использовать его в качестве запасного варианта для getCurrentPosition():

function do_something(coords) {
    // Do something with the coords here
}

navigator.geolocation.getCurrentPosition(function(position) { 
    do_something(position.coords);
    },
    function(failure) {
        $.getJSON('https://ipinfo.io/geo', function(response) { 
        var loc = response.loc.split(',');
        var coords = {
            latitude: loc[0],
            longitude: loc[1]
        };
        do_something(coords);
        });  
    };
});

См. http://ipinfo.io/developers/replacing-navigator-geolocation-getcurrentposition для более подробной информации.

person Ben Dowling    schedule 23.09.2016
comment
Какой антивирус у вас установлен на вашем компьютере или в сети? - person Ben Dowling; 07.03.2017

Вы можете запустить хром с флагом --unsafely-treat-insecure-origin-as-secure="http://example.com" (заменив "example.com" на источник, который вы действительно хотите проверить), который будет обрабатывать этот источник как безопасный для этого сеанса. Обратите внимание, что вам также необходимо включить параметр --user-data-dir=/test/only/profile/dir, чтобы создать новый тестовый профиль, чтобы флаг работал.

Например, если вы используете Windows, нажмите «Пуск» и запустите.

chrome --unsafely-treat-insecure-origin-as-secure="http://localhost:8100"  --user-data-dir=C:\testprofile
person Injection    schedule 02.06.2016
comment
И как заставить пользователей это делать? - person Marty Kiker; 09.07.2016
comment
На Mac: /usr/bin/open -n "/Applications/Google Chrome.app" --args "http://localhost:8100" --unsafely-treat-insecure-origin-as-secure="http://localhost:8100" --user-data-dir=/tmp/testprofile - person Hugo; 16.01.2019

Только для разработчиков: вы можете авторизовать определенные локальные домены для использования этих функций:

https://medium.com/@Carmichaelize/enbling-the-microphone-camera-in-chrome-for-local-unsecure-origins-9c90c3149339

person Paul    schedule 22.06.2019

В HTTP возникает ошибка.

Установите разрешение для localhost в нижней метке (принимать запросы от этих HTTP-рефереров (веб-сайтов)).

Это сработало для меня.

person srmilon    schedule 10.06.2016

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

как указано в документации, вы просто отправляете запрос с IP-адресом на URL-адрес службы http://www.geoplugin.net/php.gp?ip=xx.xx.xx.xx, вывод представляет собой сериализованный массив, поэтому вам необходимо десериализовать его перед его использованием.

Помните, что этот сервис не очень точен, как геолокация, но это все же простое и быстрое решение.

person Jeffery ThaGintoki    schedule 14.09.2016

Используйте FireFox или любой другой браузер вместо Chrome, если вы хотите протестировать его в своей среде разработки, для производства нет другого способа, кроме как использовать https.

Для среды разработки просто откройте http://localhost:8100/ в FireFox и, увы, такой ошибки нет.

person Edris    schedule 29.08.2016
comment
Firefox 64: запрос геолокации может быть выполнен только в безопасном контексте. - person Hugo; 16.01.2019
comment
Safari 12: [заблокировано] Доступ к геолокации был заблокирован из-за небезопасного подключения к 0.0.0.0:8060. - person Hugo; 16.01.2019
comment
Opera 57: [Устарело] getCurrentPosition() и watchPosition() больше не работают с небезопасными источниками. Чтобы использовать эту функцию, вам следует подумать о переключении вашего приложения на безопасный источник, такой как HTTPS. - person Hugo; 16.01.2019

Подождите некоторое время, чтобы установить SSL-сертификат getCurrentPosition() и watchPosition() больше не работают с небезопасными источниками. Чтобы использовать эту функцию, вам следует подумать о переключении вашего приложения на безопасный источник, такой как HTTPS.

person Ryan    schedule 08.09.2016