我正在本地开发环境(Ubuntu 16.04)上的一个网站上工作,并通过http://localhost.example/在Chrome(58)上测试网站,该网站连接到本地网络服务器。
运行此Javascript:
$(document).ready(function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
}
});
触发此错误:
[Deprecation] getCurrentPosition()和watchPosition()不再有效 在不安全的起源。要使用此功能,您应该考虑 将您的应用程序切换到安全的来源,例如HTTPS。看到 https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins了解更多详情。
为什么?据我所知,面向公众的网站需要运行HTTPS才能使地理位置库/功能正常运行。我们有许多公共网站在HTTPS上运行类似的代码。
但是根据depreciation documentation:
localhost被视为HTTP上的安全源,所以如果你能够 要从localhost运行您的服务器,您应该能够测试 该服务器上的功能。
以上Javascript在通过http://localhost.example/test-page/加载的HTML正文中内嵌运行 - 为什么我在Chrome中收到“不安全的来源”错误?
Firefox(53)按预期显示浏览器访问位置提示。
答案 0 :(得分:4)
Chrome将localhost over http视为安全。当您在http上使用hostnme localhost.example时,这不被视为安全。
注意:Firefox的行为与Firefox 55相似
答案 1 :(得分:0)
SSL over HTTP协议可确保客户端和服务器之间的专用通信。信息可能在传输时通过专用网络传输。网络上的任何第三方(黑客)都可以窃取该信息。为避免该浏览器强制用户使用安全连接。
在本地服务器上,信息不会超出我们的私有本地网络,因为不需要这种安全性。因此,我们可以期望浏览器允许在本地服务器上没有SSL的地理位置。理想情况下,浏览器开发人员应跳过localhost和127.0.0.1或类似来源的验证。
必须有一些技巧可以避免此类问题,即您可以在本地服务器上安装自签名SSL证书,或者您可以编辑Chrome配置文件以允许域访问地理位置,网络摄像头等。
有用的链接,