基于公网IP的API限流:Github API未认证请求限流机制探究
探究GitHub API未认证请求的限流机制
最近研究GitHub API的限流规则时,我注意到一个关键细节:未认证请求的限流上限是每小时60次,而且这类限流是和请求的源IP地址绑定的,不是和发起请求的用户账号关联。
为了搞清楚GitHub用来跟踪限流的HTTP响应头,以及触发限流后的具体表现,我写了一段简单的Bash脚本来快速耗尽这60次的请求额度,很快就得到了想要的响应结果。
核心发现的细节
- 未认证请求的限流阈值:每小时60次,基于请求发起的IP地址
- 限流相关的HTTP响应头:在每次请求的响应里,你能看到这些关键头信息:
X-RateLimit-Limit:当前的限流上限值(未认证时就是60)X-RateLimit-Remaining:剩余的可用请求次数X-RateLimit-Reset:限流额度重置的时间戳
- 触发限流后的响应:当请求次数耗尽时,GitHub会返回
403 Forbidden状态码,响应体里会包含类似这样的提示:API rate limit exceeded for [你的IP地址]. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)
我用的测试Bash脚本示例
#!/bin/bash # 循环发起未认证的GitHub API请求,快速触发限流 for i in {1..70}; do echo "第 $i 次请求..." curl -I https://api.github.com/users/octocat echo -e "\n" sleep 1 done
运行这个脚本后,前60次请求会正常返回200 OK,并在响应头里显示剩余请求次数逐渐减少;当到第61次请求时,就会收到403 Forbidden的响应,同时拿到限流触发的提示信息。
内容的提问来源于stack exchange,提问作者macalaca
相关产品推荐
相关产品推荐

