Geolocation API 在 Chrome 50 中已从不安全来源中移除 | 博客

作者:API传播员 · 2026-01-13 · 阅读时间:4分钟

Chrome 已明确表示,不再支持在非安全来源(如 HTTP)上使用 Geolocation HTTPS 提供服务的网站有直接影响,但从用户隐私和网络安全的角度来看,这一调整对整个互联网生态系统是有益的。本文将帮助您理解这一变更的原因及应对方法


变更的生效时间

此变更自 Chrome 50 起正式生效,具体时间为 2016年4月20日中午12点(太平洋标准时间)。事实上,自 Chrome 44(2015年7月21日发布)起,开发者工具控制台就已开始提示相关警告。

此外,以下来源也曾对这一变更进行强调:

  • Mobiforge(2016年1月26日)
  • Wired(2016年3月17日)
  • VentureBeat(2016年4月13日)

为什么要进行这一变更?

地理位置属于敏感数据,必须通过 HTTPS 来保护用户的隐私。如果允许从非安全来源获取用户位置数据,攻击者可能会轻易获取用户的位置信息,从而对用户隐私造成严重威胁。因此,强制要求 HTTPS 是为了提升用户数据的安全性。


受影响的用户和场景

以下场景将受到此变更的影响:

  1. 通过 HTTP 提供服务的页面:如果这些页面使用 Geolocation API,将无法再正常工作。
  2. 嵌入 HTTPS iframe 的 HTTP 页面:即使 iframe 使用 HTTPS 提供服务,但由于其嵌入在 HTTP 页面中,Geolocation API 依然无法使用。

需要注意的是,您无法通过共享的 HTTPS iframe 来实现功能的补充(polyfill)。


是否需要将整个应用迁移到 HTTPS?

我们强烈建议您将整个网络应用迁移到 HTTPS。随着浏览器功能的不断发展,许多强大的新功能(包括现有功能)都需要在安全来源(HTTPS)下运行。


localhost 是否受影响?

不受影响。根据规范,localhost 被视为“潜在安全来源”。因此,通过 localhost 提供的顶层地理定位请求仍然是有效的。


如何检测地理定位是否因不安全上下文被阻止?

可以通过 Geolocation API 的失败回调来检测。地理位置规范定义了一个 PositionError 对象,该对象包含以下属性:

  • 代码(code):当因安全上下文问题导致错误时,返回值为 1,即“权限被拒绝错误”。
  • 消息(message):提供具体的错误原因。

如果错误消息中包含“只允许安全的来源”字样,则可以确定问题是由不安全的内容引起的。

需要注意的是,仅检查页面的来源并不足够,因为页面可能运行在 HTTPS 上,但嵌套在由 HTTP 托管的 iframe 内。


如果必须使用 Geolocation API,该怎么办?

如果您的应用程序确实需要使用 Geolocation API,请务必迁移到 HTTPS。通过 HTTPS 提供服务不仅能解决此问题,还能提升用户的隐私保护和数据安全性。


总结

Chrome 强制要求 Geolocation API 在 HTTPS 下运行,是为了保护用户隐私并提升网络安全性。对于开发者来说,尽早将应用迁移到 HTTPS 是应对这一变更的最佳方式。通过遵循这一安全实践,您不仅能够继续使用 Geolocation API,还能为用户提供更安全的服务体验。


原文链接: https://developer.chrome.com/blog/geolocation-on-secure-contexts-only