# Rate Limiting

Adres: https://softwaredictionary.org/tr/terimler/rate-limiting
Kategori: Backend ve API'ler
Son güncelleme: 2026-09-30
Türkçe karşılığı: hız sınırlama, istek sınırlama
Okunuşu: reyt limiting

Kısaca: Rate limiting, istemcinin belli bir sürede yapabileceği istek sayısını sınırlayıp sunucuyu ya da API'yi kötüye kullanımdan ve aşırı yükten koruyan tekniktir.

## Rate limiting nedir?

Rate limiting, bir servisin ne sıklıkla çağrılabileceğini denetler. API anahtarı başına dakikada 100 istek ya da IP adresi başına dakikada 5 giriş denemesi gibi bir kural her istekte kontrol edilir; bir istemci sınırı aştığında, zaman aralığı sıfırlanana kadar sonraki istekler reddedilir. Web'de sunucu genellikle `429 Too Many Requests` HTTP durum koduyla yanıt verir.

Kuyruk ne kadar uzarsa uzasın dakikada yalnızca belirli sayıda kişiyi içeri alan bir kulüp görevlisi gibi çalışır. Rate limit'ler sunucuları trafik artışlarından, döngüye girmiş hatalı istemcilerden, agresif veri kazımadan (scraping) ve kaba kuvvetle parola tahmininden korur; ayrıca kapasitenin müşteriler arasında adil paylaşılmasına yardımcı olur. API gateway'lerde, reverse proxy'lerde, CDN'lerde veya uygulama içindeki middleware'de uygulanır; her sunucu aynı sayıyı görsün diye sayaçlar çoğunlukla Redis gibi hızlı, paylaşılan bir depoda tutulur.

Yaygın algoritmalar şunlardır: istekleri takvim dakikası başına sayan sabit pencere (fixed window); son 60 saniyedeki istekleri sayan kayan pencere (sliding window); ve her istemcinin sabit bir hızla token dolan bir kovasının olduğu, her isteğin bir token harcadığı token bucket. Token bucket, ortalama hızı korurken kısa ani artışlara izin verdiği için popülerdir.

Rate limiting, throttling ile yakından ilişkilidir ve iki terim sıklıkla birbirinin yerine kullanılır; ancak throttling bazen istekleri reddetmek yerine yavaşlatmak ya da kuyruğa almak anlamına gelir. Özenli API'ler sınırlarını istemcilere `Retry-After` veya `X-RateLimit-Remaining` gibi yanıt başlıklarıyla bildirir; özenli istemciler de `429` aldıklarında bekleyip üstel geri çekilme (exponential backoff) ile yeniden dener, yani her başarısız denemeden sonra daha uzun bekler.

## Önemli noktalar

- Rate limiting, bir istemcinin belirli bir sürede yapabileceği istek sayısını sınırlar.
- Sınırı aşan istemciler genellikle HTTP `429 Too Many Requests` alır.
- Sınırlar tipik olarak API anahtarı, kullanıcı veya IP adresi başına uygulanır.
- Yaygın algoritmalar sabit pencere, kayan pencere ve token bucket'tır.
- İstemciler `Retry-After` başlığına uymalı ve exponential backoff ile yeniden denemelidir.

## Örnek: Express.js'te basit bir rate limiting middleware'i

```javascript
// Fixed-window limiter: 100 requests per minute per IP (in memory, one server)
const LIMIT = 100;
const WINDOW_MS = 60_000;
const hits = new Map(); // ip -> { count, start }

function rateLimit(req, res, next) {
  const now = Date.now();
  let entry = hits.get(req.ip);
  if (!entry || now - entry.start >= WINDOW_MS) {
    entry = { count: 0, start: now }; // start a new window
    hits.set(req.ip, entry);
  }
  if (++entry.count > LIMIT) return res.status(429).send("Too Many Requests");
  next();
}
```

## Sık sorulan sorular

**HTTP 429 Too Many Requests ne anlama gelir?**

Sunucunun belirli bir sürede izin verdiğinden daha fazla istek gönderdiğiniz anlamına gelir. Yeniden denemeden önce bekleyin; yanıt `Retry-After` başlığı içeriyorsa ideal olarak orada belirtilen saniye kadar.

**Rate limiting ile throttling arasındaki fark nedir?**

Sıklıkla eş anlamlı kullanılırlar. Bir ayrım yapıldığında rate limiting sınırı aşan istekleri reddeder; throttling ise onları yavaşlatır ya da kuyruğa alır, böylece istekler kontrollü bir hızda işlenir.

**Token bucket algoritması nedir?**

Her istemciye sabit bir hızla token dolan bir kova verilir ve her istek bir token harcar. Kova boşaldığında istekler reddedilir; böylece kısa ani artışlara izin verilirken ortalama hız sınırın altında kalır.

## Kaynaklar

- [RFC 6585: Additional HTTP Status Codes (429 Too Many Requests)](https://www.rfc-editor.org/rfc/rfc6585.html)

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
