基于Google Cloud Endpoints的API出现Invalid Caller IP异常如何解决
问题触发原因
- 你所使用的
endpoints-management-control-appengine1.0.14版本存在兼容性缺陷,该版本的API控制层校验逻辑仅支持IPv4格式的调用方IP,无法识别IPv6地址。 - 近期你的API收到了来自IPv6网络的请求(错误日志中2405开头的地址即为标准IPv6地址),Google Cloud流量转发层已支持将IPv6地址透传给Endpoints服务,旧版本依赖库在上报调用信息到Google服务控制平台时,会将IPv6地址判定为非法参数,抛出对应的400错误。
- 该错误为Endpoints控制校验逻辑抛出的内部异常,不会阻断实际业务请求的处理,因此会出现请求返回200状态码但日志报错的情况。
解决方案
升级依赖版本(最推荐)
将endpoints-management-control-appengine和endpoints-framework-auth的版本从1.0.14升级至1.0.17及以上版本。Google在1.0.15及后续版本中已修复IPv6地址兼容问题,升级后即可正常识别IPv6格式的调用方IP,不会再触发该异常。临时规避方案(无法升级依赖时使用)
在web.xml的ControlFilter配置段中添加如下初始化参数,关闭调用方IP上报校验功能:
<init-param> <param-name>endpoints.control.caller_ip.enabled</param-name> <param-value>false</param-value> </init-param>
配置生效后不会再校验和上报调用方IP,可直接解决报错问题,但会损失API监控的IP维度统计能力。
- 可选临时方案
如果你的服务不需要支持IPv6访问,可在Google Cloud负载均衡/App Engine的配置中关闭IPv6访问入口,仅保留IPv4入口,从源头上避免IPv6请求进入,也可临时解决问题。
内容的提问来源于stack exchange,提问作者abhideep
相关产品推荐
相关产品推荐

