چگونه متداولترین خطاهای HTTP را برطرف سازیم؟
در این مقاله میخوانید
هنگام اتصال به یک وب سرور یا برنامه در وب، هر درخواست HTTP که توسط سرور دریافت شود، با یک status-کدِ HTTP پاسخ داده میشود. در پاسخ، کدهای status (کدهای وضعیت) HTTP کدهای سهرقمی هستند و در پنج کلاس مختلف گروهبندی میشوند. کلاس هر کد وضعیت با اولین رقم آن شناسایی میشود، مانند نمونههای زیر:
- 1xx: اطلاعاتی (Informational)
- 2xx: موفقآمیز (Success)
- 3xx: ریدایرکشن (Redirection)
- 4xx: خطای کلاینت (Client Error)
- 5xx: خطای سرور (Server Error)
در این مقاله یک راهنمایی کامل برای شناسایی و عیبیابی متداولترین کدهای خطای HTTP، یعنی کدهای وضعیت 4xx و 5xx، را بررسی میکنیم. موقعیتهای زیادی وجود دارند که باعث میشوند یک وب سرور به درخواست مراجعهکننده با یک کد خطای خاص پاسخ دهد. در اینجا چنین موقعیتهایی را بررسی میکنیم.
بررسی اجمالی خطای کلاینت و سرور (Client and Server Error)
خطاهای سرویسگیرنده (Client errors)، با کدهای وضعیت HTTP از 400 تا 499 تنظیم شدهاند که در نتیجه درخواستهای HTTP ارسال شده توسط یک کلاینت کاربر ایجاد میشود. کلاینت میتواند یک مرورگر وب باشد. حتی اگر این نوع خطاها مربوط به کلاینت باشند، باید بدانید کاربر با کدام کد خطا مواجه است. بدین ترتیب تشخیص میدهید آیا مشکل بطور بالقوه با تنظیمات پیکربندی سرور برطرف میشود یا خیر.
خطاهای سرور (Server errors) با کدهای وضعیت HTTP از 500 تا 599 تنظیم شدهاند. این کدها زمانی توسط وبسرور بازگردانده میشوند (نمایش داده میشوند) که سرور تشخیص دهد خطایی رخداده است و باید رفع شود. در غیر این صورت قادر به پردازش درخواست نیست.
نکاتی برای عیبیابی(Troubleshooting)
- پس از ایجاد تغییرات روی سرور و برای آزمایش وبسرور، هنگام استفاده از مرورگر خود ابتدا آن را بهروزرسانی کنید. برای درک جزئیات بیشتر درباره نحوه رسیدگی سرور به درخواستها، لاگ سرور را بررسی کنید. بهعنوانمثال، وبسرورهایی مانند Apache یا Nginx دو فایل به نامهای access.log و error.log تولید میکنند که برای اطلاعات مرتبط قابل اسکن هستند.
- تعاریف کد وضعیت HTTP، بخشی از استانداردی هستند که توسط برنامه ارائهدهنده ریکوئستها، پیادهسازی میشود. این بدان معناست که کد status واقعی که بازگردانده میشود به نحوه برخورد نرمافزار سرور با یک خطای خاص بستگی دارد.
اکنون که status کدهای HTTP را بهتر میشناسید، خطاهای متداول را بررسی میکنیم.
400 Bad Request
Status-کد 400 یا خطای Bad Request، به این معنی است که درخواست HTTP ارسالی به سرور دارای اصول نامعتبری است. در اینجا چند نمونه از مواقع احتمالی برای بروز خطای 400Bad Request آورده شده است:
- کوکی کاربر که با سایت مرتبط است، خراب است. پاککردن کش و کوکیهای مرورگر میتواند این مشکل را حل کند.
- Malformed request: به دلیل استفاده از مرورگر معیوب
- Malformed request: به علت خطای انسانی هنگام تنظیم دستی ریکوئستهای HTTP (مثلاً استفاده نادرست از curl)
401 Unauthorized
کد وضعیت 401 یا یک خطای Unauthorized به معنای وجود کاربری بدون احراز هویت (یا بهدرستی احراز هویت نشده) میباشد که سعی در دسترسی به resource دارد. بعبارتی کاربر باید ceredentialهایی ارائه کند تا بتواند resource محافظتشده را مشاهده کند.
برای مثال اگر کاربری سعی کند به resourceای که با احراز هویت HTTP محافظت شده، دسترسی پیدا کند با یک response-کدِ 401 مواجه خواهد شد. البته فقط تا زمانی که یک نام کاربری و رمز عبور معتبر (نام و رمزی که در فایل htpasswd. وجود دارد) به وبسرور ارائه کند.
403 Forbidden
status-کد 403 یا خطای Forbidden به این معنی است که کاربر یک ریکوئست معتبر ارائه کرده است، اما سرور از پاسخ به آن درخواست خودداری میکند. زیرا اجازه دسترسی به منبع درخواستی را ندارد. اگر به طور غیرمنتظرهای با خطای 403 مواجه شدید، چند دلیل معمولی وجود دارد که در ادامه توضیح میدهیم.
مجوزهای فایل (File Permissions)
خطاهای 403 معمولاً زمانی رخ میدهند که کاربر فرایند وب سرور را اجرا میکند و مجوز کافی برای خواندن فایلی که از قبل در دسترس بوده است را ندارد. برای ارائه مثالی از عیبیابی خطای 403، وضعیت زیر را در نظر بگیرید:
- کاربر در تلاش برای دسترسی به فایل index وب سرور، از http://example.com/index.html وارد میشود.
- فرایند کار وب سرور متعلق به کاربر www-data است.
- در سرور، index فایل در /usr/share/nginx/html/index.html قرار دارد.
اگر کاربر خطای 403 Forbidden دریافت کند، ابتدا اطمینان حاصل کنید که کاربر www-data دارای مجوزهای کافی برای خواندن فایل باشد. به طور معمول، این بدان معنی است که سایر مجوزهای فایل باید برای خواندهشدن تنظیم شوند. راههای مختلفی برای اطمینان از این موضوع وجود دارد، اما استفاده از فرمان زیر در این مورد موثر خواهد بود:
$ sudo chmod o=r /usr/share/nginx/html/index.html
htaccess.
یکی دیگر از دلایل احتمالی خطاهای 403، استفاده از فایل htaccess. است. برای مثال، از فایل htaccess. میتوان برای ممانعت از دسترسی برخی منابع به آدرسها یا محدودههای IP خاص استفاده کرد. اگر کاربر به طور غیرمنتظرهای خطای 403 Forbidden دریافت کرد، مطمئن شوید که این خطا توسط تنظیمات htaccess. ایجاد نشده است.
فایل Index وجود ندارد
اگر کاربر درخواست دسترسی به دایرکتوریِ بدون فایل ایندکسِ پیشفرض داشته باشد و از طرفی لیستسازی دایرکتوریها فعال نباشد، وب سرور خطای 403 Forbidden را نشان میدهد. بهعنوانمثال، اگر کاربر قصد دسترسی به http://example.com/emptydir/ داشته باشد و هیچ فایل index در دایرکتوری emptydir روی سرور وجود نداشته باشد، وضعیت 403 برگردانده میشود.
اگر میخواهید listing دایرکتوری فعال شود، میتوانید این کار را در پیکربندی وبسرور خود انجام دهید.
404 Not Found
کد وضعیت 404 یا خطای Not Found به این معنی است که کاربر میتواند با سرور ارتباط برقرار کند اما نمیتواند فایل یا منبع درخواستی را پیدا نماید. خطاهای 404 میتوانند در موقعیتهای مختلف رخ دهند. اگر کاربر به طور غیرمنتظرهای خطای 404 Not Found را دریافت کرد، در اینجا چند سؤال وجود دارد که باید هنگام عیبیابی بدانید:
- آیا لینکی که کاربر را به منبع سرور هدایت کرده است دارای خطای نگارشی است؟
- آیا کاربر URL را اشتباه تایپ کرده است؟
- آیا فایل در محل صحیح سرور وجود دارد؟ آیا منبع در سرور منتقل یا حذف نشده است؟
- آیا در پیکربندی سرور محل اصلی داکیومنت صحیح است؟
- آیا کاربری که دارای پردازش وبسرور فعال است، دارای دسترسی خاصی برای ورود به دایرکتوری مورد نظر میباشد؟ (نکته: دایرکتوریها برای خواندن و اجرا نیاز به permission برای دسترسی دارند)
- آیا به منبع توسط یک لینک سمبلیک دسترسی داده شده؟ در اینصورت مطمئن شوید که وب سرور برای دنبالکردن لینکهای سمبلیک پیکربندی شده باشد.
500 Internal Server Error
کد وضعیت 500 یا خطای داخلی سرور به این معنی است که سرور به دلیل نامعلومی نمیتواند درخواست را پردازش کند. گاهی اوقات این کد وقتی ظاهر میشود که با خطاهای خاص 5xx مناسبتر باشد. شایعترین علت این خطا، پیکربندی نادرست سرور (بهعنوانمثال یک فایل htaccess. نادرست) یا پکیجهای ازدسترفته (مثلاً تلاش برای اجرای یک فایل PHP بدون نصب صحیح PHP) است.
502 Bad Gateway
status-کدِ 502 یا خطای Bad Gateway به این معنی است که سرور یک ورودی یا سرور پراکسی دارد که پاسخ معتبری از سرورهای بکاند دریافت نمیکند. یعنی در واقع سرور بکاند باید ریکوئستها را برآورده کند. اگر سرور مورد نظر یک سرور پروکسی reverse مانند یک load balancer باشد، نکات زیر باید بررسی شوند:
- سرورهای بکاند (جایی که درخواستهای HTTP به آنها ارسال میشود) سالم باشند.
- پروکسی معکوس بهدرستی پیکربندی و با بکاندهای مناسب مشخص شده باشد.
- اتصال شبکه بین Backend Servers و Reverse Proxy Server سالم باشد. اگر سرورها میتوانند روی پورتهای دیگر ارتباط برقرار کنند، مطمئن شوید که firewall اجازه ترافیک بین آنها را میدهد.
- اگر وباپلیکیشن شما برای Listen کردنِ سوکت پیکربندی شده باشد، اطمینان حاصل کنید که سوکت در مکان صحیح نصب باشد. همچنین وجود مجوزهای مناسب را بررسی کنید.
503 Service Unavailable
status-کد 503 یا خطای Service Unavailable به این معنی است که سرور Overload شده یا تحت تعمیر و مراقبت میباشد. این خطا نشان میدهد سرویس از دسترس خارج است و باید در دسترس قرار گیرد.
اگر سرور تحت تعمیر نیست، نشانگر این است که که سرور بهاندازه کافی CPU یا منابع حافظه برای رسیدگی به تمام درخواستهای دریافتی را ندارد. یا اینکه وبسرور باید بهگونهای تنظیم شود تا به کاربران اجازه دهد، اهداف یا فرایندهای بیشتری را دنبال کنند.
504 Gateway Timeout
کد وضعیت 504 یا خطای Gateway Timeout به این معنی است که ورودی یا پروکسی یک سرور در بازه زمانی مجاز پاسخی از سرورهای بکاند دریافت نمیکند. این حالت معمولاً در شرایط زیر رخ میدهد:
- اتصال شبکه بین سرورها ضعیف است.
- Backend Server به دلیل عملکرد ضعیف، بسیار کند است.
- مدتزمان فعالیت، Gateway یا Proxy Server بسیار کوتاه است.
کلام آخر
اکنون که با رایجترین خطاهای HTTP و راه حل آنها آشنا شدهاید، باید مبنای خوبی برای عیبیابی مشکلات وبسرورها یا برنامههای خود داشته باشید. اگر با کدهای خطایی مواجه شدید که در این راهنما ذکر نشده است، یا راهکارهای دیگری میشناسید، میتوانید آن را با کارشناسان ما در پارس پک به اشتراک بگذارید.
سوالات متداول
1. خطای HTTP چیست؟
برخی اوقات برای دیدن یک صفحه وب با خطایی تحت عنوان HTTP با یک کد و پیغام کوتاه مواجه میشوید. این پیامها عموما نشاندهنده مشکلی از سمت وبسرور میباشند. البته برخی مواقع اشتباهات انسانی نیز می توانند سبب بروز این خطا بشوند.
2. معروف ترین خطاهای HTTP کدامند؟
معروفترین خطاهای HTTP عبارتند از:
- خطای 500 یا Internal Server Error
- خطای 403 یا Forbidden
- 404 یا Not found
- 400 یا Bad Request
- 401 یا Unauthorized
3. تفاوت بین خطای 400 و 404 از HTTP در چیست؟
خطای 404 اعلام میکند که resource وجود ندارد. به بیانی دیگر، یا API فرخواندهشده و یا پیج درخواستشده وجود ندارد. اما در خطای ۴۰۰ منبع یا resource وجود دارد اما ورودی یا همان input اشتباه است.