Cloudflare Worker获取Googlebot IP列表时触发429限流问题求解
解决Cloudflare Worker请求Googlebot IP列表被429限流的方案
以下是无需迁移到外部环境的可行解决办法:
缓存请求结果,减少重复调用
Googlebot的IP列表更新频率极低(通常几天甚至更久才会变动),可以将获取到的JSON结果缓存到Cloudflare KV或Cache API中:- 使用KV存储:在Worker中先检查KV是否存在缓存的IP列表,若有直接返回;若没有再发起请求,将响应内容存入KV并设置较长的过期时间(比如24小时)。
- 使用Cache API:发起请求前先通过
caches.default.match()检查缓存,命中则直接返回缓存响应;未命中则请求Google接口,再通过caches.default.put()将响应存入缓存。
调整请求头,模拟合法客户端
Cloudflare Worker默认的请求头可能被Google识别为批量自动化请求,可自定义User-Agent等字段模拟常规浏览器或合规爬虫:const response = await fetch('https://developers.google.com/search/apis/ipranges/googlebot.json', { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Accept': 'application/json' } });分散请求触发时机
如果多个Worker实例或脚本都在请求该接口,避免集中在同一时间发起请求:- 给请求添加随机延迟(比如0-5秒),分散请求时间点;
- 根据Worker的唯一标识(如命名空间ID)分配不同的缓存过期时间,让不同Worker的更新请求错开。
优化其他Worker的Google请求
排查同一Cloudflare账户下其他访问Google的脚本,统一优化它们的请求策略:- 给这些脚本也加上缓存逻辑,减少重复请求;
- 合并相同目的的请求,避免多个脚本独立发起重复调用。
内容的提问来源于stack exchange,提问作者k3it
相关产品推荐
相关产品推荐

