Frappe 框架开箱即用地支持对 HTTP 请求进行速率限制。
Frappe 框架基于请求所消耗的时间实现了固定窗口速率限制。该限制针对在配置窗口内所有 HTTP 请求所耗时间之和进行约束。每经过 window 秒后周期会重置,例如,将 window 设置为 3600 秒,就会根据站点时区在每个小时开始时将使用计数器重置为 0。
注意:超过限制的请求不会被处理,并会返回 HTTP 429(请求过多)响应。
你可以通过在 site_config.json 中添加类似以下配置来为你的站点启用速率限制:
{
"rate_limit": {
"limit": 600,
"window": 3600
}
}
| 键 | 描述 |
|---|---|
limit |
在速率限制窗口内允许使用的最大时间量(以秒为单位)。 |
window |
速率限制窗口的大小(以秒为单位)。 |
每个 HTTP 请求返回的 HTTP 头都会显示当前的速率限制状态,例如:
curl -i https://frappe.io/docs
HTTP/1.1 200 OK
X-RateLimit-Limit: 600000000
X-RateLimit-Remaining: 518060453
X-RateLimit-Reset: 3513
X-RateLimit-Used: 100560
如果在配置的限制耗尽后仍有请求,则会返回 HTTP 429 响应以及速率限制状态:
curl -i https://frappe.io/docs
HTTP/1.1 429 TOO MANY REQUESTS
X-RateLimit-Limit: 600000000
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1242
Retry-After: 1242
| 头部 | 描述 |
|---|---|
| Retry-After | 当前速率限制窗口重置前剩余的时间(以秒为单位)。 |
| X-RateLimit-Limit | 在一个速率限制窗口内允许使用的时间(以微秒为单位)。 |
| X-RateLimit-Remaining | 当前速率限制窗口中剩余(可使用)的时间(以微秒为单位)。 |
| X-RateLimit-Reset | 当前速率限制窗口重置前剩余的时间(以秒为单位)。 |
| X-RateLimit-Used | 处理当前请求所使用的时间(以微秒为单位)。 |