在达到限制之前监控密钥用量
随时关注配额响应头,就能在请求真正被拒绝之前,提前知道何时即将达到限制。
对于大多数用例,包括个性化、默认设置和分析,地理定位都应该放在服务器端,因为它既不需要访客浏览器的配合,也完全不需要在客户端运行任何脚本。
无论使用哪种语言,调用都是同样一个发往 /v1/ip 的普通 HTTP GET 请求,密钥通过请求头发送。
GET /v1/ip?ip=203.0.113.60
X-API-Key: mg_live_examplekey123{
"status": "ok",
"ip": "203.0.113.60",
"version": 4,
"found": true,
"country": "Netherlands",
"country_code": "NL",
"region": "North Holland",
"city": "Amsterdam",
"postcode": "1012",
"lat": 52.3702,
"lon": 4.8952,
"timezone": "Europe/Amsterdam",
"asn": 3344,
"org": "Example ISP"
}从请求中获取访客自己的地址(通常是 $_SERVER['REMOTE_ADDR']),将其作为 ip 参数传入,然后使用您的 PHP 环境已在使用的 HTTP 客户端(curl 或其封装库)发出 HTTP 请求。由于本站本身就是采用服务器端渲染的 PHP 构建、没有客户端 JavaScript,这种模式能自然地融入页面的正常渲染流程,在生成页面标记之前就能拿到位置数据。
从传入的请求对象中读取访客地址,通常是 req.socket.remoteAddress;如果您的应用前面有反向代理,则读取代理设置的请求头,例如 X-Forwarded-For。然后在渲染响应之前,使用您选用的 HTTP 客户端发出同样的 GET 请求。
如果您的应用位于负载均衡器或反向代理之后,您的代码直接看到的地址可能是代理自己的地址,而不是访客的地址。请检查代理设置的转发地址请求头,并将该地址显式作为 ip 参数传入,而不要依赖连接的原始远程地址,否则定位到的将是您自己的基础设施,而不是访客。
无论从 PHP、Node 还是任何其他后端语言调用,查询本身都只算一次请求,因为成本取决于到达 API 的请求,而不是发起调用的程序。在任一语言中,都可以在整个会话期间缓存结果,避免每个页面都重复查询。
无论使用哪种后端语言,服务器端地理定位的方式都相同:用访客的地址发起一次 HTTP 调用。完整的认证选项请参阅认证文档,字段列表请参阅IPv4 查询文档。