آشنایی با وضعیت HTTP 429: درخواست‌های بیش از حد

understanding http 429 too many requests
20 آبان 1403

HTTP یک پروتکل ارتباطی در بستر وب است که برای انتقال داده‌ها میان کلاینت و سرور مورد استفاده قرار می‌گیرد. یکی از کدهای وضعیت که ممکن است هنگام کار با HTTP با آن مواجه شویم، کد وضعیت 429 است. این کد نشان‌دهنده‌ی این است که کلاینت درخواست‌های زیادی را در مدت زمان کوتاهی به سرور ارسال کرده است و سرور به منظور جلوگیری از بار زیاد بر روی خود، این درخواست‌ها را رد می‌کند.

زمانی که شما با کد وضعیت 429 مواجه می‌شوید، به این معنی است که باید تعداد درخواست‌های خود را کاهش داده و منتظر بمانید تا سرور دوباره به شما اجازه ارسال درخواست بدهد. این روش به عنوان Rate Limiting شناخته می‌شود و به عنوان یک مکانیزم حفاظتی برای سرورها محسوب می‌شود.

چیزی که در رابطه با کد 429 حائز اهمیت است، مدیریت صحیح این وضعیت است. برای مدیریت وضعیت 429 باید مکانیزمی را پیاده‌سازی کنید که در صورت مواجه شدن با این کد، درخواست‌ها را به تعویق بیندازد و پس از گذشت مدت زمان مشخص دوباره اقدام به ارسال کند.

در این شرایط توسعه‌دهندگان باید تلاش کنند تا از روش‌های مناسبی برای استفاده صحیح و بهینه از APIها و سرورهای تحت وب استفاده نمایند، تا با چنین مشکلاتی مواجه نشوند.

در ادامه یک مثال ساده از چگونگی مواجهه با کد وضعیت HTTP 429 را مشاهده می‌کنیم:

fetch('https://api.example.com/data')  
  .then(response => {  
    if (response.status === 429) {  
      console.error('Too many requests, please slow down.');  
      // Handle retry logic here  
    } else {  
      return response.json();  
    }  
  })  
  .then(data => console.log(data))  
  .catch(error => console.error('Error:', error));

توضیحات کد:

fetch('https://api.example.com/data')
با استفاده از دستور fetch یک درخواست GET به آدرس 'https://api.example.com/data' ارسال می‌کنیم.

.then(response => { ... })
در این قسمت، بعد از دریافت پاسخ سرور، وضعیت آن را بررسی می‌کنیم.

if (response.status === 429)
چک می‌کنیم که آیا وضعیت پاسخ برابر با ۴۲۹ است یا خیر.

console.error('Too many requests, please slow down.')
اگر تعداد درخواست‌ها زیاد باشد، پیامی را در کنسول نشان می‌دهیم.

// Handle retry logic here
در این قسمت می‌توانید روال مجدد سعی در ارسال درخواست را پیاده‌سازی کنید.

else
اگر وضعیت پاسخ برابر با ۴۲۹ نباشد، پاسخ را ادامه می‌دهیم.

return response.json()
اطلاعات را به فرمت JSON پردازش می‌کنیم.

.then(data => console.log(data))
داده‌های دریافت شده را در کنسول نمایش می‌دهیم.

.catch(error => console.error('Error:', error))
در صورتی که خطایی رخ دهد، آن را در کنسول نمایش می‌دهیم.

سوالات متداول

؟

چرا با خطای 429 مواجه می‌شوم؟

؟

چگونه باید با خطای 429 برخورد کنم؟

؟

آیا می‌توانم از بروز خطای 429 جلوگیری کنم؟