429 Too Many Requests berarti ada sesuatu yang menghitung permintaan Anda, menyimpulkan jumlahnya terlalu banyak, lalu berhenti melayani. Tidak ada yang rusak — ini sistem bekerja persis seperti dirancang, dan rancangan itu sedang mengatakan dengan jelas agar Anda memperlambat.
Rumitnya, tiga lapisan berbeda bisa menghasilkannya, dan dari luar semuanya terlihat identik. Web server Anda bisa membatasi pengunjung. CDN atau WAF seperti Cloudflare bisa membatasi mereka bahkan sebelum permintaan sampai ke Anda. Dan API eksternal yang dipanggil kode Anda bisa membatasi server Anda sendiri. Kode status sama, tiga solusi yang sepenuhnya berbeda.
Jadi langkah pertama yang berguna bukan memperbaiki apa pun — melainkan menentukan lapisan mana yang sedang menghitung.
Siapa yang membatasi?
Kenali sumbernya sebelum mengubah apa pun. Responsnya sendiri biasanya sudah memberi tahu, asalkan Anda melihat header alih-alih hanya halamannya.
| Sumber | Cara mengenalinya | Perbaikan ada di mana |
|---|---|---|
| CDN / WAF (mis. Cloudflare) | Halaman error ber-branding, ada ray ID, header cf- | Dashboard CDN — bukan server Anda |
| Web server Anda | Halaman error polos Nginx/Apache atau halaman kustom | Konfigurasi server (limit_req, mod_evasive) |
| Aplikasi Anda | Body JSON dengan format error buatan Anda sendiri | Kode aplikasi dan aturan rate limit-nya |
| API di hulu | Hanya panggilan dari sisi server yang gagal; pengunjung normal | Kode klien Anda — tambahkan backoff dan cache |
Retry-After: header yang memberi tahu langkah berikutnya
429 yang ditulis dengan benar menyertakan header Retry-After, dan itulah informasi paling berguna di seluruh respons.
Ia hadir dalam dua bentuk: jumlah detik yang harus ditunggu, atau tanggal HTTP untuk ditunggu sampai kapan. Apa pun bentuknya, itu adalah server yang memberi tahu persis kapan ia akan menerima permintaan lagi — jauh lebih baik daripada menebak.
Kalau Anda sedang menulis klien, baca dan patuhi. Mencoba lagi seketika setelah menerima 429 adalah perilaku yang membuat alamat IP diblokir sepenuhnya alih-alih sekadar diperlambat, karena dari sisi server itu tidak bisa dibedakan dari serangan.
Kalau Anda yang mengeluarkan 429, kirimkan header itu. Tanpa Retry-After, klien yang ditulis baik terpaksa menebak, dan klien yang ditulis buruk akan menghantam Anda terus-menerus.
Penyebab umum, dari yang paling sering
- Kode memanggil API dalam loop tanpa mengatur tempo. Mengiterasi beberapa ribu record lalu memanggil API satu per record akan menabrak hampir semua rate limit dalam hitungan detik.
- Tidak ada cache untuk panggilan berulang. Mengambil kurs atau data produk yang sama pada setiap pemuatan halaman berarti mengalikan jumlah permintaan dengan jumlah trafik.
- Proteksi bot salah menandai trafik yang sah. Cloudflare dan alat sejenis kadang menggolongkan alat monitoring, pembaca feed, atau crawler yang rajin tapi jujur sebagai penyalahgunaan.
- Berbagi alamat IP. Di shared hosting atau di balik NAT perusahaan, Anda mewarisi reputasi sekaligus jumlah permintaan semua orang yang memakai alamat itu.
- wp-cron atau polling serupa di situs ramai. WordPress memicu cron mengikuti jumlah tampilan halaman; di situs bertrafik tinggi itu bisa berarti ratusan permintaan internal per menit.
- Loop retry tanpa backoff. 429 pertama memicu percobaan ulang, yang menghasilkan 429 lagi, yang memicu percobaan lagi — mengubah pembatasan singkat menjadi blokir berkepanjangan.
- Endpoint login atau formulir sedang dibobol paksa. Di sini 429 sedang menjalankan tugasnya, dan tindakan yang benar adalah membiarkannya.
Kalau kode Anda yang dibatasi: mundur dengan benar
Ketika Anda berada di sisi klien, perilaku yang benar sudah punya standar jelas dan layak ditulis dengan baik sekali saja.
Gunakan exponential backoff dengan jitter. Tunggu 1 detik, lalu 2, lalu 4, lalu 8 — dan tambahkan sedikit nilai acak setiap kali. Bagian acaknya penting: tanpa itu, semua klien yang gagal bersamaan akan mencoba lagi bersamaan, menciptakan gelombang serempak yang membuat semuanya tetap dibatasi.
Patuhi Retry-After bila ada. Ia mengalahkan perhitungan backoff Anda sendiri, karena server lebih tahu daripada algoritma Anda.
Batasi jumlah percobaan ulang. Loop retry tanpa batas mengubah pembatasan sementara menjadi blokir permanen sekaligus menyembunyikan masalah aslinya dari Anda.
Cache seagresif mungkin. Permintaan termurah adalah yang tidak pernah dikirim. Data yang berubah tiap jam tidak perlu diambil ulang di setiap tampilan halaman, dan cache singkat sering menghapus masalah rate limit sepenuhnya.
Gunakan batch kalau API mendukung. Satu permintaan untuk seratus record lebih baik daripada seratus permintaan untuk satu record, karena sebagian besar API menghitung permintaan, bukan record.
Kalau pengunjung Anda yang kena 429
- Pastikan dulu itu server Anda atau CDN. Halaman errornya memberi tahu: halaman ber-branding dengan ray ID berarti CDN, halaman polos berarti server.
- Tinjau pola permintaan sebenarnya di access log sebelum melonggarkan apa pun. Kalau trafiknya memang menyalahgunakan, limitnya bekerja benar dan sebaiknya dibiarkan.
- Cari salah tandai pada bot baik. Googlebot, alat pemantau uptime, dan pembaca feed yang sah bisa tersangkut aturan yang terlalu ketat — dan membatasi Googlebot akan merugikan peringkat Anda.
- Periksa apakah situs Anda sendiri yang menghasilkan beban itu. Plugin yang mem-polling endpoint internal, atau cron yang salah konfigurasi, bisa menghabiskan kuota sebelum pengunjung asli datang.
- Aktifkan page cache sebelum menaikkan limit. Halaman yang sudah di-cache bahkan tidak menyentuh penghitungnya, jadi ini memperbaiki penyebab, bukan gejala.
- Atur limit per endpoint, bukan secara global. Endpoint login dan API layak dibatasi ketat; halaman konten statis biasanya tidak perlu dibatasi sama sekali.
Kenapa menaikkan limit biasanya langkah pertama yang keliru
Naluri saat melihat 429 adalah menaikkan ambangnya. Kadang itu benar, tapi lebih sering ia mengubah satu masalah menjadi masalah yang lebih buruk.
Rate limit ada untuk melindungi kapasitas yang terbatas. Menaikkan ambang tanpa menambah kapasitas berarti permintaan itu kini benar-benar sampai ke aplikasi, memakan worker dan memori, dan Anda menukar 429 yang rapi dengan situs lambat atau 503 — pengalaman yang lebih buruk dengan biaya lebih mahal.
Urutan yang lebih baik: cache dulu, agar sebagian besar permintaan tidak pernah menyentuh penghitung; perbaiki apa pun yang menghasilkan beban tak perlu; lalu kalau permintaan asli memang masih melampaui limit, naikkan sambil menambah kapasitas untuk melayaninya.
Pengecualiannya adalah limit yang sejak awal memang disetel terlalu rendah untuk trafik normal. Kalau access log menunjukkan pengunjung biasa menjelajah secara wajar tapi tetap kena limit, itu salah konfigurasi dan menaikkannya adalah solusi yang tepat.
Ingin menetapkan limit sendiri, bukan mewarisi limit orang lain?
Cloud VPS NVMe dengan IP khusus dan akses root penuh — atur cache dan limit per endpoint sendiri. Mulai ฿150/bulan.
Pertanyaan yang Sering Diajukan
Setelah kena 429 harus menunggu berapa lama?
Baca header Retry-After — di situ tertulis persis. Kalau tidak ada, gunakan exponential backoff dengan jitter: 1 detik, lalu 2, 4, 8, masing-masing ditambah sedikit nilai acak. Jangan pernah mencoba lagi seketika; justru itulah yang mengubah pembatasan sementara menjadi blokir penuh.
429 itu salah saya atau salah server?
Biasanya tidak ada yang rusak. Artinya laju permintaan Anda melebihi yang diizinkan pihak sana. Periksa apakah kode Anda melakukan panggilan berulang yang tidak perlu dan bisa dihilangkan dengan cache; kalau laju itu memang dibutuhkan pekerjaan Anda, Anda perlu paket lebih tinggi, bukan cara mengakali.
Kenapa saya kena 429 padahal permintaannya sedikit?
Kemungkinan besar Anda berbagi alamat IP dengan orang lain — shared hosting, NAT perusahaan, atau exit node VPN — dan limitnya menghitung alamat, bukan Anda. Menguji lewat data seluler akan cepat memastikannya. Sebagian limit juga dihitung per akun, bukan per IP, jadi periksa apakah ada proses lain yang memakai kredensial yang sama.
Apakah 429 memengaruhi SEO?
Ya, kalau Googlebot yang menerimanya. Google membaca 429 sebagai sinyal untuk memperlambat dan akan menurunkan laju crawl; kalau berlanjut, halaman akan keluar dari indeks. Pastikan aturan rate limit Anda mengecualikan crawler mesin pencari yang terverifikasi, dan periksa laporan Crawl stats di Search Console untuk melihat lonjakan respons semacam ini.
GUIDES
Artikel terkait
Lanjut membaca topik serupa
401 Unauthorized — Arti Sebenarnya dan Cara Mengatasinya
HTTP menamai dua kode ini terbalik. 401 berarti "saya tidak tahu Anda siapa", sedangkan 403 berarti "saya tahu persis Anda siapa dan jawabannya tetap tidak". Memahami ini langsung menunjukkan separuh masalah mana yang harus diperbaiki.
Baca selengkapnya503 Service Unavailable — Penyebab dan Cara Mengatasinya
503 berbeda dari semua error 5xx lainnya dalam satu hal: sering kali ia jawaban yang disengaja. Server tetap berjalan, tetap memahami permintaan, dan secara aktif mengatakan bahwa saat ini ia tidak menerima pekerjaan.
Baca selengkapnya502 Bad Gateway — Arti dan Cara Mengatasinya
502 berarti satu server meminta halaman ke server lain dan menerima jawaban yang tidak bisa dipakai. Panduan ini menjelaskan dua mesin mana yang terlibat, beda 502 dengan 500 dan 504, serta urutan pemeriksaan supaya Anda menemukan penyebab aslinya lebih dulu.
Baca selengkapnya