大家好,又见面了,我是全栈君。
频率限制经常用在API中,用于限制独立请求者对特定API的请求频率。例如,如果设置频率限制为每分钟1000次,如果一分钟内超过这个限制,那么服务器就会返回 429: Too Many Attempts.
响应。
通常,一个编码良好的、实现了频率限制的应用还会回传三个响应头: X-RateLimit-Limit
, X-RateLimit-Remaining
和 Retry-After
(如果达到限制次数只能获取到 Retry-After
头)。 X-RateLimit-Limit
告诉我们在指定时间内允许的最大请求次数, X-RateLimit-Remaining
指的是在指定时间段内剩下的请求次数, Retry-After
指的是距离下次重试请求需要等待的时间(s)。
注意:每个API都会选择一个自己的频率限制时间跨度,GitHub选择的是1小时,Twitter选择的是15分钟,Laravel中间件选择的是1分钟。
在Laravel 5.2的新特性中,你可以使用一个新的中间件 throttle
,让我们先来看看这个中间件的用法,首先我们定义一个路由规则如下:
Route::group(['prefix'=>'api'],function(){
Route::get('users',function(){
return \App\User::all();
});
});
然后我们将中间件throttle
添加到其中,throttle
默认限制每分钟尝试60次,并且在一分钟内访问次数达到60次后禁止访问:
Route::group(['prefix'=>'api','middleware'=>'throttle'],function(){
Route::get('users',function(){
return \App\User::all();
});
});
如果你访问api/users
路由,就会看到响应头如下所示:
该响应意味着:
如果访问次数超过60次,响应头如下:
同时,响应内容文本为:Too Many Attempts。
如果44s后重试,页面恢复正常访问。
原因如下: laravel框架api路由默认加载 throttle中间件,该中间件限制了一分钟内访问api的次数:
注释掉这行之后就取消了访问的限制
或者将 60 调整成 10000 基本就可以保障访问的需求了。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/111737.html原文链接:https://javaforall.cn
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有