如何防止搜索机器人每次都调用API

问题描述 投票:0回答:2

我通过 PHP 使用 ipinfodb API,在其中获取 JSON 格式的地理位置响应并将其存储在 cookie 中。我使用 cookie,以便下次访问者访问该网站时,无需再次调用 API,因为 ipinfodb API 限制每秒超过两次 API 调用。一切都很顺利,但我对一件事感到困惑和困惑。

当我在 Google 网站管理员工具中以 GoogleBot 身份获取时,我得到了此标头响应 -

HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Fri, 06 Jul 2018 11:40:02 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: location=US; expires=Sat, 06-Jul-2019 11:40:02 GMT; path=/; httponly
Cache-Control: max-age=0
Expires: Fri, 06 Jul 2018 11:40:01 GMT
Vary: Accept-Encoding,User-Agent

我知道这个响应是正确的并且工作正常,IPinfodb 数据(例如国家/地区代码)已作为“location=US”存储在 cookie 中。

但是,这是否意味着,在googlebots(或其他机器人)抓取或获取我的网站期间,每次都会调用API?因为据我所知,cookie无法存储在googlebot浏览器中,因此每次都会进行昂贵的API调用。所以,第一个问题是:

  1. 每次googlebot抓取我的网站时都会调用API?
  2. 或者不知如何,机器人不调用API,那么响应如何存储在cookie中?
  3. 或者机器人仅以普通用户身份调用一次API?
  4. 如何防止 Googlebot 在每次访问时调用 API?
php cookies geolocation http-headers
2个回答
0
投票

您本质上需要客户端参与,这样您的服务器才不会违反外部 API 的使用条款。这在设计上是相当站不住脚的。此外,虽然这可能会减少每个用户的 API 调用数量,但一旦有两个以上同时访问者,您就会回到同一问题。您当前的策略使其“不太可能”达到极限,但远未解决问题。 要正确执行此操作,您的服务器应在内部缓存 API 结果。因此,您的服务器会记住特定 IP 的 API 答案,而不是要求客户端为您记住它。 memcache 或 Redis 或类似的东西将是最合适的存储类型。这样,服务器还可以跟踪上次调用 API 的时间,并限制自身以避免超出允许的限制。更不用说您从同一 IP 删除不同客户端的重复工作。

更正确的是,您可能希望在服务器上安装地理位置数据库并完全避免外部 API 调用。


0
投票

但是,当您在 PHP 中调用 API 并且您的具体目标不是为 Googlebot 调用它时,很容易贴上创可贴。

我需要对网站的访问设置一些地理限制,但又不想阻止 Googlebot,因此我掌握了它使用的 IP 地址列表。我是个好人,所以我会分享,它们是 CIDR 格式,所以你必须解决这个问题。然后,您只需告诉您的脚本不要调用 API(如果它来自其中之一)。

64.233.160.0/19 66.102.0.0/20 66.249.64.0/19 72.14.192.0/18 74.125.0.0/16 209.85.128.0/17 216.239.32.0/19 54.187.174.169/32 54.187.205.235/32 54.187.216.72/32 54.241.31.99/32 54.241.31.102/32 54.241.34.107/32 50.18.212.157/32 50.18.212.223/32 52.25.214.31/32 52.26.11.205/32 52.26.14.11/32 52.8.19.58/32 52.8.8.189/32 54.149.153.72/32 54.187.182.230/32 54.187.199.38/32 54.187.208.163/32 54.67.48.128/32 54.67.52.245/32 54.68.165.206/32 54.68.183.151/32 107.23.48.182/32 107.23.48.232/32

© www.soinside.com 2019 - 2024. All rights reserved.