خطای HTTP 429 چیست و صاحبان وبسایت چگونه می توانند مشکل ۴۲۹ Too Many Requests را رفع کنند؟ این کد وضعیت سمت سرویس گیرنده زمانی نشان داده میشود که یک سرور درخواست های بیش از حد یک کاربر یا ربات را مسدود کند. HTTP 429 به دلیل ترافیک بالا، خزندههای تهاجمی، پلاگینهای پیکربندی نادرست، یا تلاشهای brute-force برای ورود ایجاد شود، میتواند عملکرد وبسایت و دسترسی API را مختل کند. این مطلب توضیح میدهد که چرا این خطا رخ می دهد و چگونه آن را برطرف کنید، از بهینه سازی تنظیمات سرور گرفته تا جلوگیری از افزایش ناگهانی درخواست ناخواسته
درک خطای HTTP 429
کد وضعیت ۴۲۹ یک مشکل در سمت کلاینت است، پس مشکل از کاربر است، نه خود سرور. اگر درخواست های زیادی از یک منبع وارد شود، سرور برای مدتی پاسخ نمیدهد.
هنگامی که این اتفاق میافتد، سرور ممکن است شامل یک هدر Retry-After باشد. این به کلاینت میگوید که قبل از تلاش مجدد چه مدت صبر کند. یک پاسخ معمولی به این صورت است:
http CopyEdit HTTP/1.1 429 Too Many Requests Content-Type: text/html Retry-After: 120
در این حالت کلاینت باید ۱۲۰ ثانیه صبر کند تا درخواست دیگری ارسال کند.
علل رایج خطای HTTP Error 429
این خطا زمانی ظاهر میشود که یک سیستم در مدت زمان کوتاهی توسط درخواستهای بسیار زیاد بارگیری میشود. گاهی اوقات، منبع یک شخص واقعی است، در حالی که گاهی اوقات، ترافیک خودکار یا یک مشکل پیکربندی در سرور است.
۱. حجم ترافیک بالا از کاربران واقعی
وبسایتهایی که بهطور ناگهانی بازدیدکنندگان بیشتر از حد انتظار دارند، ممکن است شروع به رد کردن برخی از درخواستها کنند. این خیلی اتفاق می افتد در:
- فروشگاههای آنلاین در جشنوارههای بزرگ فروش
- سایتهای فروش بلیت زمانی که یک کنسرت یا بازی ورزشی محبوب به فروش میرسد
- پورتال های دانشگاه زمان حذف و اضافه یا اعلام نتایج امتحانات دانشجویان
اگر سروری نتواند بارگذاری درخواست را به درستی مدیریت کند، حتی کاربران معمولی که کار غیرعادی انجام نمیدهند میتوانند خطای Too Many Requests را ببینند.
۲. رباتها، خزندهها و ترافیک خودکار
همه بازدیدکنندگان وب سایت انسان نیستند. برخی از آنها رباتهای موتور جستجو، ابزارهای مقایسه قیمت یا اسکراپرهای وب هستند. اگر این سیستمها به درستی تنظیم نشده باشند، میتوانند از حد مجاز یک سرور تجاوز کنند.
به عنوان مثال:
- گوگل و بینگ قوانینی دارند تا خزندههای آنها سایتها را overload نکنند.
- ابزارهای scraping وب اگر درخواست های زیادی را پشت سر هم ارسال کنند می توانند مشکلاتی ایجاد کنند.
API rate limit به تعداد تماسهایی که کلاینت (مصرف کننده API) می تواند در یک ثانیه انجام دهد اشاره دارد. محدودیت های نرخ بر حسب درخواست بر ثانیه (RPS) محاسبه می شود. یک محدود کننده نرخ به سرورها کمک می کند تا تفاوت بین ترافیک معمولی و ربات هایی را که یکباره بیش از حد درخواست می کنند، تشخیص دهند.
۳. پلاگینها یا اکستنشنهای افزودنی پیکربندی نادرست
برخی از افزونههای مرورگر یا افزونههای وردپرس درخواست های مکرری را در پس زمینه انجام میدهند. این می تواند یک سایت را از حد خود عبور دهد بدون اینکه کاربر متوجه شود.
برخی از مقصران رایج عبارتند از:
• پلاگینهای چت زنده که هر چند ثانیه یکبار به روز میشوند
• ابزارهای سئو که مدام رتبههای جستجو را بررسی میکنند
تنظیم این تنظیمات یا استفاده از شبکه تحویل محتوا (CDN) می تواند به کاهش درخواستهای غیر ضروری کمک کند.
۴. تلاش برای ورود به سیستم Brute-Force
برخی از هکرها سعی می کنند با وارد کردن بارها و بارها رمزهای عبور مختلف، جزئیات ورود را حدس بزنند. برای جلوگیری از این امر، بسیاری از سایتها تعداد تلاشهای مجاز برای ورود را قبل از قفل کردن موارد محدود میکنند.
اگر شخصی رمز عبور خود را فراموش کند و به آزمایش ترکیبهای مختلف ادامه دهد، ممکن است به طور تصادفی کد خطای ۴۲۹ را نیز راه اندازی کند.
۵. محدودیت منابع سرور در میزبانی اشتراکی
اگر یک وبسایت بر روی یک سرور اشتراکی میزبانی شود، برای منابع با سایتهای دیگر رقابت میکند. اگر یک سایت به طور ناگهانی از پهنای باند بیش از حد استفاده کند، ارائه دهنده میزبانی ممکن است فعالیت را محدود کند تا همه چیز را متعادل نگه دارد.
برخی از نشانه هایی که نشان می دهد یک مشکل مربوط به میزبانی باعث خطای HTTP 429 می شود عبارتند از:
- وب سایت کند یا اغلب آفلاین میشود
- گزارشهای خطا درخواستهای مکرر را نشان می دهد که از یک آدرس IP منفرد میآیند
- ارائه دهنده هاست اعلانهای محدود کننده نرخ ارسال میکند
تغییر به VPS یا سرور اختصاصی می تواند به جلوگیری از این مشکلات کمک کند.
نمونههای واقعی خطاهای HTTP 429
این خطا نادر نیست بسیاری از سرویسهای شناخته شده درخواست ها را برای تحت کنترل نگه داشتن چیزها محدود میکنند.
۱. محدودیتهای API Rate در Google، Twitter و GitHub
اکثر API ها درخواست های نامحدود را مجاز نمیدانند. به عنوان مثال:
• Google Maps API فقط تعداد مجموعهای از کوئریها را در هر ثانیه اجازه میدهد.
• توییتر از ارسال تعداد زیادی توییت در مدت زمان کوتاه توسط کاربران جلوگیری میکند. API توییتر اجازه ۳۰۰ درخواست در هر پنجره ۱۵ دقیقه ای را برای کاربران استاندارد میدهد.
• GitHub کاربران احراز هویت نشده را به ۶۰ درخواست در ساعت محدود میکند.
اگر یک برنامه به طور همزمان درخواست های زیادی ارسال کند، API با کد وضعیت ۴۲۹ و یک دوره انتظار پاسخ میدهد.
۲. مشکلات مربوط به اسکراپینگ وب
ابزارهای خودکاری که دادهها را از وبسایتها میکشند، در صورتی که درخواستها را بهدرستی فاصله ندهند، میتوانند در ۴۲۹ کد پاسخ اجرا شوند. بهترین راه برای جلوگیری از این امر، معرفی تاخیرهای زمانی یا چرخش آدرس های IP است.
۳. پلتفرمهای محتوا مانند Reddit و YouTube
وبسایتهایی که مخاطبان زیادی دارند از محدودیت نرخ API برای جلوگیری از اسپم استفاده میکنند. اگر کسی بخواهد نظرات زیادی ارسال کند یا فید خود را خیلی سریع بازخوانی کند، ممکن است در عوض یک پیام خطای ۴۲۹ ببیند.
نحوه رفع خطای HTTP 429
دریافت وضعیت ۴۲۹ یک خطا نیست. این راهی است که سرور از شما میخواهد که لطفا ارسال این همه درخواست را متوقف کنید. راه حل مناسب بستگی به این دارد که آیا شما یک بازدید کننده، مالک وب سایت یا توسعه دهنده ای است که درخواست های API را مدیریت می کند.
برای بازدیدکنندگان وب سایت
اگر وبسایتی به شما خطای درخواستهای بیش از حد میدهد، در اینجا چیزی را امتحان کنید:
- چند دقیقه صبر کنید و دوباره امتحان کنید. محدودیت معمولا موقتی است.
- کش و کوکیهای مرورگر خود را پاک کنید. ممکن است مرورگر شما درخواست های قدیمی را بدون اینکه متوجه شوید ارسال میکند.
- شبکه ها را تغییر دهید. اگر آدرس IP شما مسدود شده است، اتصال از یک آدرس دیگر ممکن است کمک کند.
برای صاحبان وب سایت و توسعه دهندگان
اگر سایت شما با خطای HTTP 429 اجرا می شود، این اصلاحات ممکن است به شما کمک کند:
- کد وب سایت را بهینه کنید
تماسهای بیش از حد API، کوئریهای دیتابیس کند، یا اسکریپت هایی که اغلب بارگیری می شوند، می توانند مشکلاتی را ایجاد کنند. بررسی بکاند سایت و حذف کارهای غیر ضروری می تواند لود درخواست را کاهش دهد. - اجرای Backoff نمایی
به جای اینکه بلافاصله درخواست های ناموفق را دوباره امتحان کنید، برنامهها باید بین هر تلاش مدت بیشتری منتظر بمانند. یک راه ساده برای انجام این کار، دو برابر کردن زمان انتظار پس از هر شکست است. - محدودیتهای نرخ سرور را تنظیم کنید
اگر یک سرور از نظر محدودیتها خیلی سختگیرانه باشد، ترافیک قانونی میتواند مسدود شود. مدیران می توانند تنظیمات را در موارد زیر تغییر دهند:
Nginx
nginx CopyEdit limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
Apache
apache CopyEdit <Location /> SetEnvIf Request_URI .* limit=1 </Location>
- ترافیک مخرب را مسدود کنید
تنظیم قوانین فایروال یا استفاده از ابزارهای تشخیص ربات می تواند ترافیک بد را قبل از ایجاد مشکل متوقف کند. - سرویس میزبانی را ارتقا دهید
اگر یک وبسایت بیشتر از آنچه که یک برنامه میزبانی مشترک می تواند انجام دهد بازدید کننده دارد، تغییر به میزبانی Cloud VPS می تواند ثبات بهتری را ایجاد کند.
خرید vps لینوکس یک ماشین مجازی کامل است که امکان دسترسی SSH طبق آموزش را به آن خواهید داشت.
خرید vps لینوکس در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
جلوگیری از تکرار خطای HTTP 429
در حالی که دانستن نحوه رفع خطای ۴۲۹ درخواستهای خیلی زیاد ضروری است، جلوگیری از وقوع آن در وهله اول به همان اندازه مهم است. رفع مشکل هر بار که ظاهر میشود اتلاف وقت است وقتی میتوانید از همان ابتدا موارد را به درستی تنظیم کنید.
۱. محدودیتهای نرخ مناسب را در API ها و وب سایتها تنظیم کنید
توسعهدهندگان و صاحبان سایتها میتوانند تنظیمات محدودکننده نرخ را بهخوبی تنظیم کنند تا در عین حال از ایجاد اختلال برای کاربران عادی جلوگیری شود. به جای محدودیتهای یکاندازه، کاربران مختلف باید محدودیتهای متفاوتی داشته باشند.
- کاربرانی که به سیستم وارد شدهاند باید حق درخواست بالاتری نسبت به بازدیدکنندگان تصادفی داشته باشند.
- برای جلوگیری از اسپم API، کاربران احراز هویت نشده باید محدود شوند.
- کاربران تجاری یا مشتریان API باید محدودیتهای نرخ سفارشی متناسب با نیازهایشان داشته باشند.
۲. نظارت بر الگوهای ترافیک و شناسایی اسپایکها
افزایش ترافیک همیشه در زمانهای قابل پیشبینی اتفاق نمیافتد، اما الگوهایی را به جا میگذارند. بررسی گزارشهای درخواست، عملکرد سرور و استفاده از API، تشخیص علائم اولیه خطای HTTP 429 Too Many Requests را قبل از شروع مسدود کردن کاربران واقعی آسانتر میکند.
۳. از شبکههای تحویل محتوا (CDN) برای توزیع درخواستها استفاده کنید
CDN به کاهش درخواستهای مستقیم سرور با ذخیرهسازی نسخههای کش شده محتوایی که اغلب به آنها دسترسی دارند کمک میکند. اگر صد نفر در عرض چند ثانیه از یک صفحه وب بازدید کنند، یک CDN میتواند محتوا را بدون اینکه سرور مبدا هر درخواست را جداگانه پردازش کند، ارائه دهد. این کار فشار را کاهش می دهد و به جلوگیری از مشکلات خطای ۴۲۹ در هنگام افزایش ناگهانی ترافیک کمک می کند.
۴. بهینه سازی کوئریهای دیتابیس و کاهش درخواست های پس زمینه
برخی از وبسایتها اطلاعاتی بسیار بیشتر از آنچه واقعاً نیاز دارند درخواست میکنند، بهخصوص اگر بکاند آنها به درستی ساختار نیافته باشد. پرس و جوهای پایگاه داده بهینه نشده، اسکریپت های پس زمینه، و درخواست های غیر ضروری افزونه همگی می توانند به این مشکل بیافزایند. پاکسازی این نواحی، رفع دائمی مشکلات HTTP 429 را آسانتر میکند.
۵. مدیریت خطای کاربر پسند را پیاده سازی کنید
اگر کاربران با پیغام خطای ۴۲۹ مواجه شوند، حداقل باید به جای مسدود شدن بدون توضیح، اطلاعات مفیدی دریافت کنند. یک رویکرد بهتر این خواهد بود:
- توضیح اینکه چرا درخواستشان رد شد.
- پیشنهاد زمانی که میتوانند دوباره امتحان کنند.
- ارائه نسخههای ذخیرهشده محتوا یا گزینههای دسترسی جایگزین.
نتیجه گیری
جلوگیری و رفع خطای HTTP 429 خیلی از درخواستها فقط مربوط به رفع سریع نیست، بلکه در مورد حفظ یک وبسایت یا API پایدار و کارآمد است. با اجرای محدودیتهای نرخ، بهینهسازی فرآیندهای باطن، استفاده از CDN و ارتقای هاست در صورت لزوم، صاحبان وبسایت میتوانند اختلالات را کاهش دهند و دسترسی راحت را برای کاربران تضمین کنند. کلید نظارت فعال و مدیریت هوشمند سرور است، بنابراین HTTP 429 یک اتفاق نادر است، نه یک مانع مکرر.