经过几个月的 100% 稳定性,今天我在谷歌地图服务上收到 403 错误

Posted

技术标签:

【中文标题】经过几个月的 100% 稳定性,今天我在谷歌地图服务上收到 403 错误【英文标题】:After months of 100% stability, today I get 403 Error on google maps services 【发布时间】:2012-05-29 23:08:55 【问题描述】:

我只是想知道是否有人可以解释为什么我的谷歌地图服务会出现 403 Forbidden 错误。

我一直在加载地图 api:

<script type="text/javascript" src="//maps.googleapis.com/maps/api/js?libraries=places&amp;sensor=false"></script>

然后使用地理编码和自动完成库将用户搜索转换为坐标以显示在我的搜索结果的地图上。

直到昨天,当我在访问自动完成服务时开始看到 403 错误时,这一直运行良好(几个月)。

我 100% 确信我没有达到每天 25k 的查询限制,而且我没有对代码进行任何更改。

我现在已经在我的脚本加载中添加了一个 API 密钥,并且问题消失了,但我想确保这种情况不会再次发生。基于位置的搜索是我们网站的一项主要功能,如果它出现故障,我们就会失去客户。

有没有人知道为什么会发生这种情况?

在什么情况下会再次发生?

【问题讨论】:

嗨。可能是 &amp;amp; 您是否尝试将其替换为 &amp;amp; @JanisLankovskis - 谢谢,但它仍在使用 &amp;amp; 并正常工作。新的电话很简单://maps.googleapis.com/maps/api/js?libraries=places&amp;amp;sensor=false&amp;amp;key=APPLICATIONKEY 【参考方案1】:

这个问题再次出现即使使用 API 密钥集 - 我认为问题实际上在于缓存 google maps javascript。

我让我的网络服务器动态决定要在本地组合、缩小和缓存哪些 javascript。这是使用RequestReduce 完成的。

当客户端 javascript 变得陈旧时(在我的情况下大约 3 天) - 谷歌返回 403 未经授权。

API 密钥只是一个红鲱鱼。我可以删除密钥并且我的代码仍然有效 - 只要地图 js 是“新鲜的”。

就我而言,解决方法是将maps.googleapis.com 添加到RequestReduce 忽略列表中:

javascriptUrlsToIgnore="maps.googleapis.com"

对于其他人,请确保不要将 maps.googleapis.com javascript 缓存超过几个小时(如果有的话)。

【讨论】:

你在说什么 API 密钥? 从code.google.com/apis/console获得的。哪个放在google maps api调用中://maps.googleapis.com/maps/api/js?key=APP‌​LICATIONKEY 我不敢相信这是问题所在。清除缓存,一切正常。感谢您回来发布此内容。 这正是我的问题。 html5 应用程序缓存使这种情况很容易发生。他们确实应该在回复中提供更多信息,以便为您提供有关实际问题的提示。 使用 cloudflare 并启用性能(火箭脚本)和积极缓存时出现类似问题。【参考方案2】:

Google Maps JavaScript API 最近将小版本升级到 3.9changelog,默认版本从 3.6 升级到 3.7。我注意到您没有在用于加载 Google Maps JavaScript API 库的 URL 中指定版本,因此您检索了默认版本 3.7。关于 3.7 版的一件重要事情是它现在需要为某些库使用密钥。 Versioning section of the Developer's Guide 中提供了有关您应该使用哪个版本的信息。

其他一些也遇到过类似的问题,但是如果您在添加密钥后运行良好,那么您应该没问题。如果您想在未来收到有关 Google Maps API 更改的通知,您可以register for notifications。

【讨论】:

感谢您的回复,我猜是最近,您的意思是昨天!我已经注册了通知,所以希望将来能够更加主动......

以上是关于经过几个月的 100% 稳定性,今天我在谷歌地图服务上收到 403 错误的主要内容,如果未能解决你的问题,请参考以下文章

在谷歌地图中保留用户位置中心 - Swift

在谷歌地图上覆盖 ESRI shapefile 的最佳方法?

如何在谷歌地图中添加两种类型的标记

基于纬度在谷歌地图上绘制路径

在谷歌地图上绘制区域

我想通过从 json 获取经度和纬度在谷歌地图上显示标记