-
Notifications
You must be signed in to change notification settings - Fork 16
Open
Description
I want to configure a global limit and i want to configure Route limits.
I think my problem is about the understanding of:
https://github.com/artisansdk/ratelimiter#how-multiple-buckets-work
So i have setup a default in the kernel:
protected $middlewareGroups = [
'web' => [
'throttle:10,1,30',
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
//default throttle | allow 600 requests | every second you gain 2 more requests | on exceeding limit, wait for 300 seconds
//translates to: the full 600 requests are backfilled in 5 minutes you can make up to 1200 requests in 5 minutes
'throttle:600,2,300',
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];And configured:
use Illuminate\Support\Facades\Route;
use ArtisanSdk\RateLimiter\Resolvers\Route as Limiter;
Route::group([
'prefix' => 'v1',
'namespace' => 'App\Http\Controllers\Api\V1',
//'middleware' => ['auth:api'],
'middleware' => 'throttle:' . Limiter::class . ',5,1,30',
], function () {
Route::apiResource('tasks', TaskController::class, [
]);
});So 5 requests at start, 1/s drain, 30 sec penalty.
The rate limits are enforced correctly 👍
But the returned headers are always the headers, from the global default and not from Route Limit.
That makes it impossible to know for the clients, what limits are on a route.
Response while not limited: (request on /api/v1/tasks)
HTTP/1.1 200 OK
Host: localhost:8400
Date: Fri, 29 Sep 2023 11:32:52 GMT
Connection: close
X-Powered-By: PHP/8.2.10
Content-Type: text/html; charset=UTF-8
Cache-Control: no-cache, private
Date: Fri, 29 Sep 2023 11:32:52 GMT
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 599
Access-Control-Allow-Origin: *
While limited: (request on /api/v1/tasks)
HTTP/1.1 429 Too Many Requests
Host: localhost:8400
Date: Fri, 29 Sep 2023 11:33:46 GMT
Connection: close
X-Powered-By: PHP/8.2.10
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 594
retry-after: 30
x-ratelimit-reset: 1695987256
Cache-Control: no-cache, private
date: Fri, 29 Sep 2023 11:33:46 GMT
Content-Type: text/html; charset=UTF-8
Access-Control-Allow-Origin: *
The retry-after seems to be correct but not Limit and Remaining
So i am unsure if its a bug or i misunderstand the README.
Thanks in advance.
Metadata
Metadata
Assignees
Labels
No labels