HTTP Error 429 Too Many Requests: Penyebab & Cara Mengatasinya

Apa Itu HTTP Error 429?
HTTP error 429 adalah kode status error klien yang berarti Too Many Requests (Terlalu Banyak Permintaan). Server memberitahu Anda bahwa Anda telah mengirim terlalu banyak permintaan dalam jangka waktu tertentu, dan untuk sementara menolak memproses permintaan tambahan sampai Anda memperlambat laju pengiriman.
Error ini didefinisikan dalam RFC 6585 dan merupakan bagian dari mekanisme rate limiting HTTP. Error 429 adalah salah satu error yang paling sering ditemui oleh developer saat bekerja dengan API, tetapi pengguna biasa juga bisa menemukannya saat menjelajahi website.
Kode status 429 berbeda dari error 4xx lainnya. Error 403 berarti Anda tidak memiliki izin akses. Error 401 berarti Anda belum melakukan autentikasi. Error 429 berarti kredensial Anda tidak bermasalah — Anda hanya mengirim permintaan terlalu cepat.
Ketika server mengembalikan respons 429, server mungkin menyertakan header Retry-After yang memberi tahu Anda secara persis berapa lama harus menunggu sebelum mengirim permintaan berikutnya.
Seperti Apa Tampilan Error 429?
Error 429 tampil berbeda-beda tergantung browser, aplikasi, atau klien API yang Anda gunakan. Berikut variasi yang paling umum:
| Konteks | Pesan Error |
|---|---|
| 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 |
| Respons API | {"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 |
Berbeda dengan error 500 yang menunjukkan masalah di sisi server, error 429 adalah error di sisi klien — server bekerja normal, tetapi melindungi dirinya dari terlalu banyak permintaan.
Cara Kerja Rate Limiting
Rate limiting adalah teknik yang digunakan server untuk mengontrol berapa banyak permintaan yang bisa dilakukan klien dalam jangka waktu tertentu. Ketika batas terlampaui, server merespons dengan HTTP 429.
Ada beberapa algoritma rate limiting yang umum digunakan:
Fixed Window — Server mengizinkan N permintaan per jendela waktu (misalnya, 100 permintaan per menit). Penghitung direset pada interval tetap.
Sliding Window — Mirip dengan fixed window, tetapi jendela waktu bergeser setiap ada permintaan baru. Ini mencegah lonjakan di batas antar jendela.
Token Bucket — Server memberikan token yang diisi ulang secara berkala. Setiap permintaan mengonsumsi satu token. Ketika token habis, permintaan ditolak.
Leaky Bucket — Permintaan diproses dengan laju konstan tanpa memperhatikan ukuran lonjakan. Permintaan berlebih akan diantrekan atau dibuang.
Sebagian besar API mengkomunikasikan batas laju mereka melalui header respons. Header yang umum antara lain X-RateLimit-Limit (jumlah maksimum permintaan), X-RateLimit-Remaining (sisa permintaan dalam jendela waktu saat ini), dan X-RateLimit-Reset (kapan jendela waktu direset).
Memahami algoritma mana yang digunakan suatu layanan membantu Anda merancang klien agar tetap dalam batas dan menghindari error 429.
Penyebab Umum HTTP Error 429
Error 429 bisa dipicu oleh berbagai skenario. Berikut penyebab paling umum, dikelompokkan berdasarkan siapa yang biasanya mengalaminya:
| Penyebab | Siapa yang Terdampak | Deskripsi |
|---|---|---|
| Batas rate API terlampaui | Developer | Anda mengirim lebih banyak permintaan API daripada yang diizinkan layanan per menit/jam |
| Terlalu banyak permintaan halaman | Pengunjung | Anda me-refresh halaman terlalu cepat atau membuka terlalu banyak tab sekaligus |
| Web scraping / bot | Developer | Script otomatis mengakses website terlalu cepat memicu rate limit |
| Perlindungan brute-force | Pengunjung | Terlalu banyak percobaan login gagal memicu rate limiting keamanan |
| Perlindungan DDoS | Semua orang | Cloudflare, AWS WAF, atau layanan serupa memblokir lonjakan traffic |
| Rate limiting IP bersama | Pengunjung / pengguna VPN | Banyak pengguna di balik IP yang sama (VPN, proxy, jaringan kantor) secara kolektif melampaui batas |
| Rate limit yang salah konfigurasi | Pemilik website | Rate limit di server diatur terlalu ketat sehingga memblokir traffic yang sah |
| Masalah plugin atau tema | Pemilik website | Plugin WordPress melakukan panggilan API berlebihan atau cron job berjalan terlalu sering |
| Webhook storm | Developer | Webhook yang salah konfigurasi mengulangi pengiriman gagal dalam loop yang ketat |
Cara Mengatasi Error 429 (Untuk Pengunjung)
Jika Anda melihat error 429 saat browsing website, berikut solusi yang bisa Anda coba. Mulai dari solusi paling sederhana dan lanjutkan ke bawah.
1. Tunggu dan Coba Lagi
Solusi paling sederhana adalah menunggu. Error 429 bersifat sementara — server meminta Anda untuk memperlambat, bukan memblokir Anda secara permanen.
Tunggu 30 detik hingga beberapa menit, lalu coba lagi. Sebagian besar rate limit direset dalam 1-5 menit. Jika halaman masih menampilkan 429, tunggu lebih lama — beberapa layanan menerapkan batas per jam atau per hari.
Jangan berulang kali me-refresh halaman. Setiap refresh mengirim permintaan baru dan bisa memperpanjang periode rate limiting.
2. Hapus Cache dan Cookie Browser
Terkadang data cache atau cookie bisa memicu rate limiting. Menghapusnya bisa membantu:
Chrome: Tekan
Ctrl+Shift+Delete(Windows) atauCmd+Shift+Delete(Mac) → pilih "Cookie" dan "Gambar dan file cache" → klik "Hapus data"Firefox: Tekan
Ctrl+Shift+Delete→ pilih "Cache" dan "Cookie" → klik "Hapus Sekarang"Edge: Tekan
Ctrl+Shift+Delete→ centang "Cookie" dan "Data cache" → klik "Hapus sekarang"Safari: Buka Safari → Pengaturan → Privasi → Kelola Data Situs Web → Hapus Semua
Setelah menghapus, tutup dan buka kembali browser sebelum mengunjungi situs lagi.
3. Putuskan Koneksi VPN atau Proxy
Jika Anda menggunakan VPN atau proxy, Anda mungkin berbagi alamat IP dengan ratusan pengguna lain. Ketika total permintaan mereka melebihi batas server, semua orang di IP tersebut terkena rate limit.
Coba putuskan koneksi VPN Anda dan akses situs menggunakan koneksi internet biasa. Jika error 429 hilang, berarti IP VPN yang menjadi masalah.
Jika Anda tetap membutuhkan VPN, coba pindah ke lokasi server yang berbeda untuk mendapatkan alamat IP baru.
4. Nonaktifkan Ekstensi Browser
Beberapa ekstensi browser mengirim permintaan di background tanpa sepengetahuan Anda. Ad blocker, alat perbandingan harga, ekstensi SEO, dan plugin auto-refresh semuanya bisa menghasilkan permintaan tambahan yang memicu rate limiting.
Untuk menguji, buka situs dalam jendela incognito/private (yang secara default menonaktifkan sebagian besar ekstensi). Jika error 429 hilang, salah satu ekstensi Anda yang menjadi penyebabnya.
Nonaktifkan ekstensi satu per satu untuk menemukan yang bermasalah. Di Chrome, buka chrome://extensions/ dan matikan satu per satu.
5. Coba Jaringan yang Berbeda
Jika tidak ada cara lain yang berhasil, server mungkin sedang membatasi alamat IP Anda secara spesifik. Coba:
Beralih dari Wi-Fi ke data seluler (ini memberi Anda IP yang berbeda). Coba akses situs dari jaringan yang berbeda. Jika Anda menggunakan jaringan kantor atau sekolah, coba dari rumah — jaringan besar berbagi satu IP publik.
Anda bisa mengecek alamat IP Anda saat ini menggunakan tool What Is My IP kami untuk memverifikasi bahwa IP sudah berubah.
Cara Mengatasi Error 429 (Untuk Developer)
Jika Anda sedang membangun aplikasi yang memanggil API, error 429 berarti kode Anda mengirim permintaan terlalu cepat. Berikut cara menanganinya dengan benar.
1. Terapkan Exponential Backoff
Exponential backoff adalah strategi retry standar industri. Alih-alih langsung mencoba lagi setelah mendapat 429, Anda meningkatkan waktu tunggu secara bertahap di antara percobaan ulang:
Percobaan pertama: tunggu 1 detik. Percobaan kedua: tunggu 2 detik. Percobaan ketiga: tunggu 4 detik. Percobaan keempat: tunggu 8 detik. Dan seterusnya.
Berikut implementasi dasar dalam JavaScript:
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');
}Tambahkan jitter (variasi acak) pada delay untuk mencegah banyak klien mencoba ulang pada waktu yang persis sama. Ganti perhitungan delay dengan Math.pow(2, attempt) * 1000 + Math.random() * 1000.
2. Patuhi Header Retry-After
Ketika server mengembalikan respons 429, server sering menyertakan header Retry-After yang memberitahu Anda berapa lama harus menunggu. Header ini bisa berisi jumlah detik atau tanggal HTTP:
Retry-After: 60 berarti tunggu 60 detik. Retry-After: Thu, 06 Mar 2026 12:00:00 GMT berarti tunggu hingga waktu tersebut.
Selalu periksa header ini sebelum menerapkan logika backoff Anda sendiri. Server lebih tahu dari kode Anda berapa lama Anda harus menunggu.
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. Cache Respons API
Jika aplikasi Anda melakukan panggilan API yang sama berulang kali, simpan respons dalam cache daripada terus-menerus mengakses API. Ini secara drastis mengurangi jumlah permintaan Anda.
Gunakan in-memory cache (seperti Redis atau Map sederhana) untuk data yang sering diakses. Atur TTL (time-to-live) yang wajar berdasarkan seberapa sering data berubah.
Misalnya, jika Anda mengecek record DNS untuk suatu domain, hasilnya kemungkinan tidak akan berubah dalam 5 menit ke depan — simpan dalam cache.
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. Gunakan Webhook, Bukan Polling
Jika Anda terus-menerus melakukan polling ke API untuk mengecek perubahan (misalnya, mengecek status pesanan setiap 10 detik), beralihlah ke webhook jika layanan mendukungnya.
Dengan webhook, server mengirim pembaruan ke aplikasi Anda ketika ada perubahan — tidak perlu polling terus-menerus. Ini bisa mengurangi panggilan API Anda dari ribuan per jam menjadi hanya beberapa saja.
Sebagian besar API modern (Stripe, GitHub, Twilio, Shopify) mendukung webhook. Periksa dokumentasi API untuk konfigurasi webhook.
5. Minta Batas Rate yang Lebih Tinggi
Jika Anda memang membutuhkan lebih banyak panggilan API, hubungi penyedia layanan. Banyak API menawarkan batas rate yang lebih tinggi untuk paket berbayar atau aplikasi terverifikasi.
Saat meminta batas yang lebih tinggi, jelaskan kegunaan Anda dan berikan estimasi volume permintaan yang diharapkan. Layanan seperti Google APIs, Twitter API, dan GitHub API semuanya memiliki proses untuk meminta batas yang lebih tinggi.
Beberapa API juga menawarkan bulk endpoint yang memungkinkan Anda mengambil beberapa resource dalam satu permintaan, mengurangi total jumlah panggilan.
Cara Mengatasi Error 429 (Untuk Pemilik Website)
Jika pengunjung atau konsumen API Anda mendapat error 429, masalahnya ada di konfigurasi server Anda. Berikut cara mendiagnosis dan memperbaikinya.
1. Sesuaikan Rate Limit Anda
Jika pengguna yang sah terkena error 429, rate limit Anda mungkin terlalu ketat. Tinjau dan sesuaikan.
Di Nginx, modul rate limiting (ngx_http_limit_req_module) mengontrol laju permintaan:
# 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;
}
}Parameter burst sangat penting — parameter ini mengizinkan lonjakan traffic singkat tanpa memicu 429. Tanpanya, bahkan pola browsing normal bisa mencapai batas.
Di Apache, gunakan mod_ratelimit atau mod_evasive. Di Node.js, gunakan package seperti express-rate-limit.
2. Whitelist IP Terpercaya
Jika klien tertentu (layanan monitoring, payment processor, microservice Anda sendiri) terkena rate limit, whitelist alamat IP mereka.
Di Nginx, Anda bisa menggunakan map untuk melewati rate limiting untuk IP terpercaya:
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;Whitelist juga bot mesin pencari (Googlebot, Bingbot) jika mereka terkena rate limit — memblokir mereka merugikan SEO Anda. Anda bisa memverifikasi identitas bot menggunakan pencarian reverse DNS.
3. Periksa Pengaturan WAF dan CDN
Jika Anda menggunakan Cloudflare, AWS WAF, Sucuri, atau layanan keamanan lainnya, aturan rate limiting mereka mungkin yang menjadi sumber error 429 — bukan server origin Anda.
Di Cloudflare, periksa Security → WAF → Rate Limiting Rules. Anda bisa melihat aturan mana yang terpicu dan menyesuaikan ambang batasnya. Mode "I'm Under Attack" dari Cloudflare sangat agresif.
Di AWS WAF, periksa aturan web ACL untuk aturan berbasis rate. Ambang batas minimum adalah 100 permintaan per 5 menit — pastikan ini sesuai untuk level traffic Anda.
Tinjau analitik CDN Anda untuk membedakan antara traffic yang sah dan traffic bot sebelum menyesuaikan batas.
4. Optimalkan Performa Server
Terkadang error 429 muncul karena server tidak mampu menangani beban, dan rate limiting aktif sebagai mekanisme keamanan. Meningkatkan performa server memungkinkan Anda menaikkan batas rate dengan aman.
Optimasi utama meliputi: aktifkan response caching untuk mengurangi beban backend, gunakan CDN untuk aset statis, tambahkan database query caching dengan Redis atau Memcached, terapkan connection pooling untuk koneksi database, dan skalakan secara horizontal dengan load balancing jika traffic membutuhkannya.
Gunakan tool HTTP Headers kami untuk memverifikasi header caching Anda sudah diatur dengan benar.
Error 429 vs Error HTTP Lainnya
Mudah untuk bingung antara error 429 dengan kode status HTTP lainnya. Berikut perbedaannya:
| Kode Status | Nama | Arti | Perbedaan Utama |
|---|---|---|---|
| [401](/blog/http-401-unauthorized) | Unauthorized | Autentikasi diperlukan | Kredensial tidak ada atau tidak valid |
| [403](/blog/403-forbidden-error) | Forbidden | Akses ditolak secara permanen | Anda tidak memiliki izin |
| **429** | **Too Many Requests** | **Rate limited sementara** | **Anda mengirim permintaan terlalu cepat** |
| [500](/blog/http-error-500) | Internal Server Error | Server mengalami crash | Bug atau kegagalan di sisi server |
| [502](/blog/http-error-500) | Bad Gateway | Server upstream gagal | Proxy tidak bisa menjangkau backend |
| [503](/blog/http-error-503) | Service Unavailable | Server kelebihan beban atau maintenance | Server terlalu sibuk untuk merespons |
| [504](/blog/504-gateway-timeout) | Gateway Timeout | Server upstream terlalu lama | Backend tidak merespons tepat waktu |
Perbedaan utama: 429 bersifat sementara dan disengaja. Server dalam kondisi sehat — server secara aktif memilih untuk menolak permintaan Anda demi melindungi dirinya. Error 5xx lainnya menunjukkan ada sesuatu yang benar-benar rusak.
Cara Mencegah Error 429
Mencegah lebih baik daripada mengobati. Berikut praktik terbaik untuk menghindari error 429 sejak awal:
Baca dokumentasi API — Ketahui batas rate sebelum menulis kode. Sebagian besar layanan mempublikasikan batas mereka dengan jelas.
Pantau penggunaan Anda — Lacak header
X-RateLimit-Remaininguntuk mengetahui seberapa dekat Anda dengan batas.Batch permintaan — Gunakan bulk endpoint jika tersedia alih-alih melakukan panggilan individual.
Distribusikan permintaan — Sebarkan panggilan API secara merata dari waktu ke waktu, bukan mengirim sekaligus.
Gunakan API key — Permintaan yang terautentikasi biasanya mendapat batas rate yang lebih tinggi dibanding yang anonim.
Terapkan circuit breaker — Jika Anda mendapat 429 berulang kali, hentikan pengiriman permintaan sepenuhnya selama periode cooldown.
Uji dengan simulator rate limit — Simulasikan respons 429 di development untuk memastikan error handling Anda berfungsi.
Catat respons 429 — Lacak kapan dan di mana rate limiting terjadi untuk mengoptimalkan pola permintaan Anda.
Periksa header rate-limit server
Gunakan alat HTTP Headers gratis dari DNS Robot untuk memeriksa header respons server — termasuk header pembatasan laju seperti Retry-After dan X-RateLimit-Limit.
Try HTTP Headers CheckerFrequently Asked Questions
HTTP error 429 berarti "Too Many Requests" (Terlalu Banyak Permintaan). Server membatasi Anda karena Anda mengirim terlalu banyak permintaan dalam waktu singkat. Ini adalah pemblokiran sementara — tunggu beberapa menit lalu coba lagi.