php - Laravel 的 Throttling 是如何在不同的路由上工作的?
问题描述
我正在尝试对不同的路线设置不同的速率限制,
起初我以为我可以->middleware('throttle:x,y')
在更改 x,y 时简单地为每条路线添加一个不同的,它只会将其应用于该路线。
例如
Route::get('/sample1', ['controller@method1'])->middleware('throttle:5,1');
Route::get('/sample2', ['controller@method2'])->middleware('throttle:10,2');
所以这里/sample1每分钟有5个限制,/sample2每2分钟自动有10个限制,不会影响彼此的限制。
但是后来我在源代码上阅读了>这个文件<。
显然关键是'key' => $prefix . $this->resolveRequestSignature($request)
而且$this->resolveRequestSignature($request)
很简单:
if ($user = $request->user()) {
return sha1($user->getAuthIdentifier());
} elseif ($route = $request->route()) {
return sha1($route->getDomain().'|'.$request->ip());
}
与那里的路线无关,所以我假设油门是全局的,除非我们指定$prefix
第三个参数链接这个->middleware('throttle:x,y,PREFIX')
但我不明白的是,它目前像我期望的那样工作!这意味着当我在一条路线上受到限制时,我不会在另一条路线上受到限制。
我的问题是:
如果我们想要一个不同的,我们是否应该总是提供第三个参数
x,y
,或者它会被自动应用?如果两条不带前缀的路由具有不同的油门限制,将应用哪一个?
非常感谢任何额外的细节
解决方案
推荐阅读
- php - 为什么 Xampp 服务器允许打开不存在的路径
- mongodb - MongoDB组获取字段的最小值及其各自的数据
- r - 如何用日期轴注释折线图上的时间段?
- python - 将数据框中的日期列转换为 unix python
- haskell - 为什么引入严格性的函数称为 seq?
- javascript - Vue.js (vuex)。重新加载页面时,计算属性返回未定义。(vuex 中对象数据的硬编码数组)
- java - 尝试正确设置研磨窗格
- c# - 如何从Arduino记录在C#中串行com端口随机出现的特定变量数据
- r - 一旦 dplyr 已按另一个变量分组,如何为一个变量组合多个文本条目
- node.js - Heroku 应用程序因 ERR_UNKNOWN_FILE_EXTENSION 而崩溃