laravel - API 速率限制响应无效标头
问题描述
使用 Laravel7。kernel.php 中的全局 api 速率限制设置覆盖了 api 标头响应。例如在 api.php
api.php
Route::get('/test1', function () {
return 'test777';
})->middleware("throttle:5,1");;
kernel.php
'api' => [
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
当达到 5 次尝试的最大限制时,接收 429 个无效标头。应该是 5 次尝试。X-RateLimit-Limit 60 X-RateLimit-剩余 56
需要在 kernel.php 中注释 'throttle:60,1' 以使用正确的 x-rate 标头进行响应。不想评论它,因为所有其他 api 的速率限制为每分钟 60 个请求。有什么替代方法吗?
解决方案
为防止处理速率限制的缓存键发生冲突,如果速率限制与默认值不同,则应为速率限制命名:
Route::get('/test1', function () {
return 'test777';
})->middleware("throttle:5,1,test1");
这样,用于设置速率限制的缓存键之间就不会发生冲突。
这在“速率限制段”下的文档中进行了描述
请注意,在 Laravel 8 中,这已经改变,现在你也可以configureRateLimiting
在你的RouteServiceProvider
:
protected function configureRateLimiting()
{
RateLimiter::for('test1', function (Request $request) {
return Limit::perMinute(5);
});
}
然后你可以使用:
Route::get('/test1', function () {
return 'test777';
})->middleware("throttle:test1");
L8 方法还允许对速率限制进行更多控制,因此如果您需要良好的速率限制功能,则值得考虑升级
推荐阅读
- java - 如何修复 hikaripool 和 springboot-jpa 中的连接泄漏错误
- javascript - Node 中 indexOf 是如何实现的?
- javascript - jQuery [data-anchor] 似乎出现故障
- bash - Shell 脚本的行为因我 SSH 来自的 PC 而异
- puppet - Tagmail-如何在 master 中设置我们的 smtp 服务器
- php - CodeIgniter - “ldap_bind():无法绑定到服务器:无法联系 LDAP 服务器”来自 localhost
- java - 如何使用客户端证书从 rest api 获得响应
- css - 使用 SCSS 的有效 CSS 结构
- c# - 如何在 .NET Core 2.0 中显示数据注释错误消息?验证消息未显示
- css - 将块元素添加到自定义网格