HTTP 429 Too Many Requests Hatası: Nedenleri ve Çözüm Yolları

HTTP 429 Hatası Nedir?
HTTP 429 hatası, Too Many Requests (Çok Fazla İstek) anlamına gelen bir istemci taraflı durum kodudur. Sunucu, belirli bir zaman dilimi içinde çok fazla istek gönderdiğinizi tespit etmiş ve yavaşlamanız için geçici olarak yeni isteklerinizi işlemeyi reddetmektedir.
Bu hata RFC 6585 ile tanımlanmıştır ve HTTP hız sınırlama mekanizmasının bir parçasıdır. API'lerle çalışan geliştiricilerin en sık karşılaştığı hatalardan biridir, ancak web sitelerini gezinirken normal kullanıcılar da bu hatayı görebilir.
429 durum kodu diğer 4xx hatalarından farklıdır. 403 hatası, erişim yetkinizin olmadığını belirtir. 401 hatası ise kimlik doğrulaması yapılmadığını gösterir. 429 hatasında ise kimlik bilgileriniz doğrudur — yalnızca çok hızlı istek gönderiyorsunuz.
Sunucu 429 yanıtı döndürdüğünde, bir sonraki isteği göndermeden önce ne kadar beklemeniz gerektiğini belirten bir Retry-After başlığı da ekleyebilir.
429 Hatası Nasıl Görünür?
429 hatası, kullandığınız tarayıcıya, uygulamaya veya API istemcisine göre farklı biçimlerde karşınıza çıkar. En yaygın varyasyonlar şunlardır:
| Ortam | Hata Mesajı |
|---|---|
| Chrome / Edge | 429 Too Many Requests |
| Firefox | 429 Too Many Requests |
| Nginx | 429 Too Many Requests (nginx) |
| Apache | 429 Too Many Requests |
| Cloudflare | Error 429 — Rate Limited |
| API Yanıtı | {"error": "rate_limit_exceeded", "retry_after": 60} |
| WordPress | 429 Too Many Requests — You have been rate limited |
| cURL | HTTP/1.1 429 Too Many Requests |
Sunucu taraflı bir soruna işaret eden 500 hatalarından farklı olarak, 429 bir istemci taraflı hatadır — sunucu sorunsuz çalışıyordur, ancak kendisini aşırı isteklerden korumaktadır.
Hız Sınırlama (Rate Limiting) Nasıl Çalışır?
Hız sınırlama, sunucuların bir istemcinin belirli bir zaman penceresi içinde kaç istek gönderebileceğini kontrol etmek için kullandığı bir tekniktir. Sınır aşıldığında sunucu HTTP 429 yanıtı döndürür.
Yaygın olarak kullanılan birkaç hız sınırlama algoritması vardır:
Sabit Pencere (Fixed Window) — Sunucu, her zaman penceresi başına N isteğe izin verir (örn. dakikada 100 istek). Sayaç sabit aralıklarla sıfırlanır.
Kayan Pencere (Sliding Window) — Sabit pencereye benzer, ancak zaman penceresi her istekle birlikte kayar. Bu yöntem pencere sınırlarındaki ani yoğunlukları önler.
Token Kovası (Token Bucket) — Sunucu, sabit bir hızda yenilenen token'lar atar. Her istek bir token tüketir. Token'lar bittiğinde istekler reddedilir.
Sızdıran Kova (Leaky Bucket) — İstekler, ani yoğunluk büyüklüğünden bağımsız olarak sabit bir hızda işlenir. Fazla istekler kuyruğa alınır veya düşürülür.
Çoğu API, hız sınırlarını yanıt başlıkları aracılığıyla iletir. Yaygın başlıklar arasında X-RateLimit-Limit (izin verilen maksimum istek), X-RateLimit-Remaining (mevcut pencerede kalan istek) ve X-RateLimit-Reset (pencerenin ne zaman sıfırlanacağı) bulunur.
Bir servisin hangi algoritmayı kullandığını anlamak, istemcinizi sınırlar içinde kalacak ve 429 hatalarından kaçınacak şekilde tasarlamanıza yardımcı olur.
HTTP 429 Hatasının Yaygın Nedenleri
429 hatası birçok farklı senaryoda tetiklenebilir. En yaygın nedenler, genellikle kimin karşılaştığına göre gruplandırılmıştır:
| Neden | Kimleri Etkiler | Açıklama |
|---|---|---|
| API hız sınırı aşıldı | Geliştiriciler | Servisin dakika/saat başına izin verdiğinden fazla API isteği gönderdiniz |
| Çok fazla sayfa isteği | Ziyaretçiler | Bir sayfayı çok hızlı yenilediniz veya aynı anda çok sayıda sekme açtınız |
| Web kazıma / botlar | Geliştiriciler | Bir web sitesine çok hızlı istek gönderen otomatik betikler hız sınırlarını tetikler |
| Kaba kuvvet koruması | Ziyaretçiler | Çok fazla başarısız giriş denemesi güvenlik hız sınırlamasını tetikledi |
| DDoS koruması | Herkes | Cloudflare, AWS WAF veya benzeri hizmetler trafik artışlarını engelliyor |
| Paylaşılan IP hız sınırlaması | Ziyaretçiler / VPN kullanıcıları | Aynı IP arkasındaki birden fazla kullanıcı (VPN, proxy, kurumsal ağ) toplam olarak sınırı aşıyor |
| Yanlış yapılandırılmış hız sınırları | Site sahipleri | Sunucu tarafı hız sınırları çok agresif ayarlanmış, meşru trafiği engelliyor |
| Eklenti veya tema sorunları | Site sahipleri | WordPress eklentileri aşırı API çağrısı yapıyor veya zamanlanmış görevler çok sık çalışıyor |
| Webhook fırtınaları | Geliştiriciler | Yanlış yapılandırılmış bir webhook, başarısız teslimatları dar bir döngüde tekrar deniyor |
429 Hatası Nasıl Düzeltilir (Ziyaretçiler İçin)
Bir web sitesini gezerken 429 hatası görüyorsanız, deneyebileceğiniz çözümler aşağıda sıralanmıştır. En basit çözümden başlayarak ilerleyin.
1. Bekleyin ve Tekrar Deneyin
En basit çözüm beklemektir. 429 hatası geçicidir — sunucu sizi kalıcı olarak engellemez, sadece yavaşlamanızı ister.
30 saniye ile birkaç dakika arasında bekleyip tekrar deneyin. Çoğu hız sınırı 1–5 dakika içinde sıfırlanır. Sayfa hâlâ 429 gösteriyorsa daha uzun bekleyin — bazı hizmetler saatlik veya günlük sınırlar uygular.
Sayfayı sürekli yenilemekten kaçının. Her yenileme yeni bir istek gönderir ve hız sınırlama süresini uzatabilir.
2. Tarayıcı Önbelleğini ve Çerezleri Temizleyin
Bazen önbelleğe alınmış veriler veya çerezler hız sınırlamasını tetikleyebilir. Bunları temizlemek sorunu çözebilir:
Chrome:
Ctrl+Shift+Delete(Windows) veyaCmd+Shift+Delete(Mac) tuşlarına basın → "Çerezler" ve "Önbelleğe alınmış resimler" seçin → "Verileri temizle"ye tıklayınFirefox:
Ctrl+Shift+Deletetuşlarına basın → "Önbellek" ve "Çerezler" seçin → "Şimdi Temizle"ye tıklayınEdge:
Ctrl+Shift+Deletetuşlarına basın → "Çerezler" ve "Önbelleğe alınmış veriler" işaretleyin → "Şimdi temizle"ye tıklayınSafari: Safari → Ayarlar → Gizlilik → Web Sitesi Verilerini Yönet → Tümünü Kaldır
Temizleme işleminden sonra siteyi tekrar ziyaret etmeden önce tarayıcıyı kapatıp yeniden açın.
3. VPN veya Proxy Bağlantısını Kesin
VPN veya proxy kullanıyorsanız, IP adresinizi yüzlerce başka kullanıcıyla paylaşıyor olabilirsiniz. Bu kullanıcıların toplam istekleri sunucunun sınırını aştığında, o IP'deki herkes hız sınırlamasına takılır.
VPN bağlantınızı kesip siteye normal internet bağlantınızla erişmeyi deneyin. 429 hatası ortadan kalkarsa sorun VPN IP'sindedir.
VPN'e ihtiyaç duyuyorsanız yeni bir IP adresi almak için farklı bir sunucu konumuna geçmeyi deneyin.
4. Tarayıcı Eklentilerini Devre Dışı Bırakın
Bazı tarayıcı eklentileri sizin haberiniz olmadan arka planda istek gönderir. Reklam engelleyiciler, fiyat karşılaştırma araçları, SEO eklentileri ve otomatik yenileme eklentileri hız sınırlamasını tetikleyecek ekstra istekler oluşturabilir.
Test etmek için siteyi gizli/özel pencerede açın (bu mod, çoğu eklentiyi varsayılan olarak devre dışı bırakır). 429 hatası kaybolursa eklentilerinizden biri suçludur.
Sorunlu eklentiyi bulmak için eklentileri tek tek devre dışı bırakın. Chrome'da chrome://extensions/ adresine gidip bunları ayrı ayrı kapatabilirsiniz.
5. Farklı Bir Ağ Deneyin
Hiçbir şey işe yaramıyorsa sunucu, IP adresinizi özellikle hız sınırlamaya tabi tutuyor olabilir. Şunları deneyin:
Wi-Fi'den mobil veriye geçin (bu size farklı bir IP verir). Siteyi tamamen farklı bir ağdan deneyin. Kurumsal veya okul ağındaysanız evden deneyin — büyük ağlar tek bir genel IP paylaşır.
IP adresinizin değiştiğini doğrulamak için IP Adresim Nedir aracımızı kullanabilirsiniz.
429 Hatası Nasıl Düzeltilir (Geliştiriciler İçin)
API çağrıları yapan bir uygulama geliştiriyorsanız, 429 hatası kodunuzun çok hızlı istek gönderdiği anlamına gelir. Bu durumu doğru şekilde ele almanın yolları aşağıda açıklanmıştır.
1. Üstel Geri Çekilme (Exponential Backoff) Uygulayın
Üstel geri çekilme, endüstri standardı yeniden deneme stratejisidir. 429 aldıktan sonra hemen yeniden denemek yerine, denemeler arasındaki bekleme süresini kademeli olarak artırırsınız:
İlk deneme: 1 saniye bekleyin. İkinci deneme: 2 saniye bekleyin. Üçüncü deneme: 4 saniye bekleyin. Dördüncü deneme: 8 saniye bekleyin. Ve bu şekilde devam eder.
JavaScript'te temel bir uygulama örneği:
async function fetchWithBackoff(url, options = {}, maxRetries = 5) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.status !== 429) return response;
// Check Retry-After header first
const retryAfter = response.headers.get('Retry-After');
const delay = retryAfter
? parseInt(retryAfter) * 1000
: Math.pow(2, attempt) * 1000; // Exponential backoff
console.log(`Rate limited. Retrying in ${delay / 1000}s...`);
await new Promise(resolve => setTimeout(resolve, delay));
}
throw new Error('Max retries exceeded');
}Birden fazla istemcinin aynı anda yeniden deneme yapmasını önlemek için gecikmeye jitter (rastgele sapma) ekleyin. Gecikme hesaplamasını Math.pow(2, attempt) * 1000 + Math.random() * 1000 olarak değiştirin.
2. Retry-After Başlığına Uyun
Sunucu 429 yanıtı döndürdüğünde, genellikle ne kadar beklemeniz gerektiğini belirten bir Retry-After başlığı ekler. Bu başlık saniye cinsinden bir sayı veya HTTP tarihi içerebilir:
Retry-After: 60 — 60 saniye bekleyin demektir. Retry-After: Thu, 06 Mar 2026 12:00:00 GMT — belirtilen zamana kadar bekleyin demektir.
Kendi geri çekilme mantığınızı uygulamadan önce mutlaka bu başlığı kontrol edin. Sunucu, ne kadar beklemeniz gerektiğini kodunuzdan daha iyi bilir.
import requests
import time
def make_request(url):
response = requests.get(url)
if response.status_code == 429:
retry_after = response.headers.get('Retry-After', '5')
wait_time = int(retry_after)
print(f"Rate limited. Waiting {wait_time} seconds...")
time.sleep(wait_time)
return make_request(url) # Retry after waiting
return response3. API Yanıtlarını Önbelleğe Alın
Uygulamanız aynı API çağrısını birden fazla kez yapıyorsa, her seferinde API'ye istek göndermek yerine yanıtı önbelleğe alın. Bu yöntem istek sayınızı önemli ölçüde azaltır.
Sık erişilen veriler için bellek içi önbellek (Redis veya basit bir Map gibi) kullanın. Verinin ne sıklıkta değiştiğine göre makul bir TTL (yaşam süresi) belirleyin.
Örneğin, bir alan adının DNS kayıtlarını sorguluyorsanız, sonuçlar muhtemelen sonraki 5 dakika içinde değişmeyecektir — bunları önbelleğe alın.
const cache = new Map();
const CACHE_TTL = 5 * 60 * 1000; // 5 minutes
async function cachedFetch(url) {
const cached = cache.get(url);
if (cached && Date.now() - cached.time < CACHE_TTL) {
return cached.data;
}
const response = await fetch(url);
const data = await response.json();
cache.set(url, { data, time: Date.now() });
return data;
}4. Yoklama Yerine Webhook Kullanın
Bir API'yi değişiklik kontrolü için sürekli yokluyorsanız (örneğin her 10 saniyede sipariş durumu kontrol etmek), servis destekliyorsa webhook'lara geçin.
Webhook'larda sunucu, bir değişiklik olduğunda uygulamanıza güncelleme gönderir — sürekli yoklama yapmaya gerek kalmaz. Bu yöntem, saatlik API çağrılarınızı binlerceden yalnızca birkaç düzine seviyesine düşürebilir.
Çoğu modern API (Stripe, GitHub, Twilio, Shopify) webhook destekler. Webhook yapılandırması için API belgelerini kontrol edin.
5. Daha Yüksek Hız Sınırları Talep Edin
Gerçekten daha fazla API çağrısına ihtiyacınız varsa servis sağlayıcıyla iletişime geçin. Birçok API, ücretli planlar veya doğrulanmış uygulamalar için daha yüksek hız sınırları sunar.
Daha yüksek sınır talep ederken kullanım senaryonuzu açıklayın ve beklenen istek hacminizin tahminlerini paylaşın. Google API'leri, Twitter API ve GitHub API gibi hizmetlerin tümü yükseltilmiş sınır talep etme süreçlerine sahiptir.
Bazı API'ler ayrıca tek bir istekte birden fazla kaynağı almanıza olanak tanıyan toplu (bulk) uç noktalar sunar ve toplam çağrı sayısını azaltır.
429 Hatası Nasıl Düzeltilir (Site Sahipleri İçin)
Ziyaretçileriniz veya API kullanıcılarınız 429 hatası alıyorsa sorun sunucu yapılandırmanızdadır. Sorunu teşhis etmenin ve düzeltmenin yolları aşağıdadır.
1. Hız Sınırlarınızı Ayarlayın
Meşru kullanıcılar 429 hatası alıyorsa hız sınırlarınız çok katı olabilir. Bunları gözden geçirip ayarlayın.
Nginx'te hız sınırlama modülü (ngx_http_limit_req_module) istek hızlarını kontrol eder:
# Define rate limit zone: 10 requests per second per IP
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
server {
location /api/ {
# Allow bursts of 20, no delay for first 10
limit_req zone=api burst=20 nodelay;
limit_req_status 429;
}
}burst parametresi kritik öneme sahiptir — kısa trafik artışlarının 429 tetiklemeden geçmesine izin verir. Bu parametre olmadan normal gezinme kalıpları bile sınıra takılabilir.
Apache'de mod_ratelimit veya mod_evasive kullanın. Node.js'te express-rate-limit gibi paketleri tercih edin.
2. Güvenilir IP'leri Beyaz Listeye Alın
Belirli istemciler (izleme hizmetleri, ödeme işlemcileri, kendi mikro servisleriniz) hız sınırlamasına takılıyorsa IP adreslerini beyaz listeye alın.
Nginx'te güvenilir IP'ler için hız sınırlamasını atlamak üzere bir eşleme (map) kullanabilirsiniz:
geo $rate_limit {
default 1;
192.168.0.0/16 0; # Internal network
10.0.0.0/8 0; # Internal network
203.0.113.50 0; # Payment processor
}
map $rate_limit $limit_key {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $limit_key zone=api:10m rate=10r/s;Ayrıca hız sınırlanan arama motoru botlarını (Googlebot, Bingbot) da beyaz listeye alın — onları engellemek SEO'nuza zarar verir. Bot kimliklerini ters DNS sorgusu kullanarak doğrulayabilirsiniz.
3. WAF ve CDN Ayarlarını Kontrol Edin
Cloudflare, AWS WAF, Sucuri veya başka bir güvenlik hizmeti kullanıyorsanız, 429 hatalarının kaynağı kaynak sunucunuz değil, bu hizmetlerin hız sınırlama kuralları olabilir.
Cloudflare'da Security → WAF → Rate Limiting Rules bölümünü kontrol edin. Hangi kuralların tetiklendiğini görebilir ve eşik değerlerini ayarlayabilirsiniz. Cloudflare'ın varsayılan "I'm Under Attack" modu özellikle agresiftir.
AWS WAF'ta web ACL kurallarınızda hıza dayalı kuralları kontrol edin. Minimum eşik 5 dakikada 100 istektir — bu değerin trafik seviyelerinize uygun olduğundan emin olun.
Sınırları ayarlamadan önce meşru trafik ile bot trafiğini ayırt etmek için CDN analizlerinizi inceleyin.
4. Sunucu Performansını Optimize Edin
Bazen 429 hataları, sunucunun yükü kaldıramaması ve güvenlik mekanizması olarak hız sınırlamanın devreye girmesi nedeniyle ortaya çıkar. Sunucu performansını iyileştirmek, hız sınırlarını güvenle artırmanıza olanak tanır.
Temel optimizasyonlar şunlardır: arka uç yükünü azaltmak için yanıt önbelleğe alma etkinleştirin, statik dosyalar için bir CDN kullanın, Redis veya Memcached ile veritabanı sorgu önbelleği ekleyin, veritabanı bağlantıları için bağlantı havuzu (connection pooling) uygulayın ve trafik gerektiriyorsa yük dengeleme ile yatay ölçeklendirme yapın.
Önbellek başlıklarınızın doğru ayarlandığını doğrulamak için HTTP Başlıkları aracımızı kullanın.
429 ile Diğer HTTP Hataları Arasındaki Fark
429 hatasını diğer HTTP durum kodlarıyla karıştırmak kolaydır. Aralarındaki farklar şöyledir:
| Durum Kodu | Adı | Anlamı | Temel Fark |
|---|---|---|---|
| [401](/blog/http-401-unauthorized) | Unauthorized | Kimlik doğrulaması gerekli | Eksik veya geçersiz kimlik bilgileri |
| [403](/blog/403-forbidden-error) | Forbidden | Erişim kalıcı olarak reddedildi | Yetkiniz yok |
| **429** | **Too Many Requests** | **Geçici olarak hız sınırlandı** | **İstek gönderme hızınız çok yüksek** |
| [500](/blog/http-error-500) | Internal Server Error | Sunucu çöktü | Sunucu taraflı hata veya arıza |
| [502](/blog/http-error-500) | Bad Gateway | Üst sunucu yanıt veremedi | Proxy, arka uca ulaşamadı |
| [503](/blog/http-error-503) | Service Unavailable | Sunucu aşırı yüklü veya bakımda | Sunucu yanıt veremeyecek kadar meşgul |
| [504](/blog/504-gateway-timeout) | Gateway Timeout | Üst sunucu çok uzun sürdü | Arka uç zamanında yanıt vermedi |
Temel ayrım: 429 geçici ve kasıtlıdır. Sunucu sağlıklıdır — kendisini korumak için isteğinizi aktif olarak reddetmeyi tercih etmektedir. Diğer 5xx hataları ise gerçekten bir şeylerin bozulduğunu gösterir.
429 Hataları Nasıl Önlenir?
Önlem almak, tedavi etmekten iyidir. 429 hatalarını en başından önlemek için en iyi uygulamalar şunlardır:
API belgelerini okuyun — Kod yazmadan önce hız sınırlarını bilin. Çoğu servis sınırlarını açıkça yayınlar.
Kullanımınızı izleyin — Sınıra ne kadar yakın olduğunuzu öğrenmek için
X-RateLimit-Remainingbaşlıklarını takip edin.İstekleri toplu gönderin — Tekil çağrılar yapmak yerine mümkün olduğunda toplu (bulk) uç noktaları kullanın.
İstekleri dağıtın — Ani yoğunluklar göndermek yerine API çağrılarını zaman içinde eşit olarak yayın.
API anahtarları kullanın — Kimlik doğrulanmış istekler genellikle anonim olanlardan daha yüksek hız sınırları alır.
Devre kesici (circuit breaker) uygulayın — Tekrarlanan 429 hataları alıyorsanız bir bekleme süresi boyunca istek göndermeyi tamamen durdurun.
Hız sınırı simülatörleriyle test edin — Hata işlemenizin çalıştığından emin olmak için geliştirme ortamında 429 yanıtlarını simüle edin.
429 yanıtlarını kaydedin — İstek kalıplarınızı optimize etmek için hız sınırlamanın ne zaman ve nerede gerçekleştiğini izleyin.
Sunucu hız sınırlama başlıklarını kontrol edin
DNS Robot'ın ücretsiz HTTP Başlıkları aracıyla Retry-After, X-RateLimit-Limit ve X-RateLimit-Remaining gibi hız sınırlama başlıklarını kontrol edin.
Try HTTP Headers CheckerFrequently Asked Questions
HTTP 429 hatası "Too Many Requests" (Çok Fazla İstek) anlamına gelir. Sunucu, kısa süre içinde çok fazla istek gönderdiğiniz için sizi hız sınırlamasına tabi tutuyor. Geçici bir engellemedir — birkaç dakika bekleyip tekrar deneyin.