deathisonitsway selamlar..laravel rest api için http header x-rate limit hız sınırlayıcısını kullanıyor.. https://github.com/laravel/framework/blob/7212b1e9620c36bf806e444f6931cf5f379c68ff/src/Illuminate/Routing/Middleware/ThrottleRequests.php burayı kontrol ediyorumda..benim attığım isteği x-rate olarak nasıl kontrol ediyor burda o kısmı anlamadım..ne ip kontrolü var ne bir şey..birde bu atılan headera nasıl guvenebiliyorsun ki? biri bana burayı detaylıca anlatabilir mi?
mgsmus X-RateLimit-Limit, X-RateLimit-Remaining ve Retry-After Bunlar kullanıcı tarafından gönderilen headerlar değil framework içerisinde internal olarak oluşturuluyor, framework her seferinde kendi değerleri ile değiştiriyor. O yüzden kullanıcının bunları değiştirip değiştirememesi bir şey ifade etmiyor. Peki bu değerleri headerları okumadan alıyorsa nereden alıyor? Illuminate\Cache\RateLimiter kullanarak Cache ile tutuyor. Önbellekten okuyup headerları belirliyor, sonrasında kontrol için headerlara bakmıyor elbette, yine önbelleğe bakıyor. Asıl işlem önbellek üzerinde yapılıyor. Ayrıca resolveRequestSignature yöntemini takip ederseniz ip adresini de aldığını görebilirsiniz. \Illuminate\Http\Request::fingerprint() ile ip adresini de dahil ederek bir iz oluşturuyor.
deathisonitsway evet finderprinti takip etmedim..evet oradan alıyormuş..sadece gostermelik olarak header set ediyor o zaman..okuduğu yer cache.
mgsmus Evet ama aslında göstermelik değil. Siz bu headerları okuyarak kalan limitiniz konusunda bilgi sahibi oluyorsunuz.
deathisonitsway peki şöyle bir soru daha sorayım sana mgsmus 'api' => [ 'throttle:60,1', 'bindings', ], kernelde bu keyler var sadece..genişletebiliyor muyuz peki..ben mesela şu ipden gelenlerin 300 saniyede 10 istek yapmalarını istiyorum..
mgsmus Kendiniz app/Http/Middleware içerisine ThrottleRequests.php kopyası alıp içerisinde değişiklik yapın. Sonra Kernel.php içerisinde $routeMiddleware kısmında throttle bölümüne kendi oluşturduğunuz middlewarei ekleyin.