使用 Google 地图地理编码查找(API 键)的奇怪响应

Odd responses using Google Maps Geocode Lookup (API key)

我一直在使用通过 Google 使用地理编码查找的网站。我已经测试了一段时间了。

https://maps.googleapis.com/maps/api/geocode/json?address=1600+Pennsylvania+Ave+NW,+Washington,+DC&key=XXXXXXXXXXXXXXXXXXXXXXXXXXX

我已将该密钥锁定到特定服务器。突然之间,我看到了地理编码查找错误。 Google 返回的响应是:

{
    error_message: "Browser API keys cannot have referer restrictions when used with this API.",
    results: [ ],
    status: "REQUEST_DENIED"
}

当我尝试一个根本没有 API 键的简单请求时,它似乎工作正常。在这里你可以自己试试。将下一行复制并粘贴到浏览器的 URL 和 return.

https://maps.googleapis.com/maps/api/geocode/json?address=1600+Pennsylvania+Ave+NW,+Washington,+DC

现在,我可能不应该在嘴里看礼物马,但整件事看起来很奇怪。如果我今天删除我的 API 密钥,我的网站(依赖地址到 Lat/Lng 转换)明天会全部失败吗?

是否有其他人在使用 Google 地图和 GeoCode 查找时遇到奇怪的故障?有人知道 Google 地图/地理编码团队的系统内容或政策变更吗??

编辑、更新: 所以这个缺陷持续了大约 40 分钟,从大约 9:10PM PST 到太平洋标准时间晚上 10 点之前。现在好像修好了。

回复评论:嗯。我一直在将 API 键视为:

Server keys: Create and use a Server key if your application runs on a server. Do not use this key outside of your server code. For example, do not embed it in a web page. To prevent quota theft, restrict your key so that requests are only allowed from your servers' source IP addresses.

Browser keys: Create and use a Browser key if your application runs on a client, such as a web browser. To prevent your key from being used on unauthorized sites, only allow referrals from domains you administer.

我肯定会在中间没有服务器的情况下直接从用户到 Google 进行完整的查找。我无法在那里安全地使用服务器密钥。所以我已经阅读了您的输入,它肯定说是用于地理编码的服务器密钥。但是,这实际上意味着任何人都不应该允许浏览器/客户端交互来处理地理编码查找。坦率地说,我只是假设这篇文章已经过时并且有点不准确。

虽然你可能是对的,但整个事情看起来很奇怪。我本以为,如果 Geocode 需要从服务器(仅)进行查找,而不是通过浏览器(永远)从 Web 应用程序进行查找,那么对于这种效果会有一些直接的评论。

哦,带有服务器防护的浏览器密钥似乎又可以使用了。再一次,我只是说整件事很奇怪。我将此视为 Google 地理编码服务器的临时故障。

是的,我当然可以引入一个 API 服务器来进行往返 Ajax 调用,以便使用服务器密钥安全地进行查找,但这有什么意义呢?是否有我没有看到的好处?我想我可以添加像随机数这样的元素来保护我的往返地理编码中间查找服务器不被其他人使用,等等……但在这一点上,我只是感到困惑。

更新 #2:2016 年 6 月 16 日 同样,这整件事还不清楚。我提交了一份 feature request to the Google GeoCode team 要求对文档进行澄清更新,以解决使用浏览器 API 键进行地理编码查找的问题。

The documentation for the Geocoding Web Service 状态:

Standard API users: If you're using the API under the standard plan, you must use a server key (a type of API key) set up in a project of your choice.

错误消息表明您正在使用 浏览器密钥