بررسی خطاها و کدهای رایج در درخواستهای HTTP
در نوشتن این مقاله، فرض را بر این گرفتهایم که شما به عنوان خواننده، با تعاریف پایه و اساسی مثل تعریف پروتکل آشنا هستید. بنابراین آشنایی با کدهای خطا در پروتکل HTTP هم به کارتان خواهد آمد. (البته جالب اینجاست که تمام کدهای پاسخ در HTTP لزوماً بیانگر خطا نیستند!) بهتر است بیشتر از این حاشیه نرویم و با مروری بر HTTP و HTTPS شروع کنیم..
HTTP و HTTPS چه هستند؟
پروتکل http مثل یک تونل بزرگ است که اطلاعات از طریق آن بین کامپیوترها جابهجا میشود. برای همین وقتی آدرس سایتها را وارد میکنید، اول اسم بزرگراه اطلاعاتی یعنی همین http میآید و بعد به اینترنت میگویید:«اطلاعات را از این بزرگراه رد کن بعد برو به آدرس iranserver»
البته آن اوایل اطلاعات خیلی ساده و فقط در حد متن بودند و صفحات هم با زبان استاندارد html نوشته میشدند؛ ولی بعداً با پیشرفت تکنولوژی، اوضاع کمی پیچیدهتر شد و پای تراکنشهای بانکی یا ردو بدل کردن اطلاعات شخصی مثل سال تولد یا رمز کارتهای بانکی و … به ماجرا باز شد.
این شد که اهمیت امنیت چندین برابر بیشتر از قبل شد و پروتکل جدیدی به نام https معرفی شد. آن s اضافه https از کلمۀ secure گرفته شده و به معنی امنیت است.
شما با نصب گواهی SSL روی سایت، امنیت این تونل را بالاتر میبرید و بهجای http از پروتکل امن https بهرهمند میشوید.
کلاس مختلف کدها در پروتکل HTTP
تمام درخواستهایی که از طریق پروتکل HTTP ارسال میشوند، پاسخی در قالب یک کد ۳ رقمی دریافت میکنند. هرکدام از این کدهای ۳ رقمی، بیانگر وضعیتی مشخص هستند:
- ۱XX: کدهای ۱۰۰ تا ۱۹۹ اطلاعات گوناگون را نمایش میدهند.
- ۲XX: کدهای ۲۰۰ تا ۲۹۹ نشان دهنده موفقیت در پردازش و بررسی درخواست هستند.
- ۳XX: کدهای ۳۰۰ تا ۳۹۹ ارجاع شدن را نشان میدهند.
- ۴XX: کدهای ۴۰۰ تا ۴۹۹ بیانگر خطا از جانب کاربر هستند.
- ۵XX: کدهای ۵۰۰ تا ۵۹۹ خطا از جانب سرور را نمایش میدهند.
در این مقاله قصد داریم راجع به کدهای خطا در پروتکل HTTP صبحت کنیم. به همین جهت مشخصاً سراغ کدهای دو دستهبندی آخر میرویم.
کدهای خطا در پروتکل HTTP
همانطور که دیدید، در پروتکل HTTP کدهای ۳ رقمی که با دو عدد ۴ و ۵ شروع شوند، معنای خطا یا ارور را میرسانند. این خطا یا از طرف کاربر است یا از طرف سرور.
مشکلاتی که در سمت کاربر وجود دارند
اگر پاسخی که از جانب سرور میرسد با رقم ۴ شروع شود، یعنی ایراد از طرف Client یا کاربر است. کدهای بسیار زیادی وجود دارند که با ۴ شروع میشوند. در ادامه برخی از مهمترین آنها را معرفی خواهیم کرد:
۴۰۰: Bad Request
زمانی که سرور نتواند درخواست شما را شناسایی کند، خطایی با این کد مشاهده خواهید کرد. دلیل این اتفاق، نامعتبر بودن Syntax (ترکیببندی درخواست ارسالی) است.
دسترسی شما در مقام کاربر، تائید نشده است! در صورت مشاهده این کد، باید اقدام به تائید دسترسی خود نمایید.
۴۰۳: Forbidden
نمایش کد ۴۰۳، این معنی را میدهد که کاربر حق دسترسی به محتوای مدنظر را ندارد!
نکته: در خطای ۴۰۱، هویت کاربر مشخص نیست، اما در خطای ۴۰۳، سرور کاربر را شناسایی کرده و عدم صلاحیت او را تشخیص داده است!
اما دلایلی که منجر به نمایش این کد خطا میشوند، موارد زیر هستند:
۱) سطح دسترسی فایل (File Permissions)
خطای ۴۰۳ بیشتر مواقع در چنین موقعیتی رخ میدهد:
کاربری که پروسه وبسرور را اجرا میکند، اجازه دسترسی به فایل درخواست شده را ندارد!
برای نمونه میتوایند موقعیت زیر را جهت عیبیابی یک خطای ۴۰۳ فرض کنید:
- کاربری درخواست خود را جهت دسترسی به محتوای http://example.com/index.html به وبسرور ارسال میکند.
- مالکیت این فرایند در اختیار کاربری با نام www-data است.
- داخل سرور، فایل HTML در مسیر user/share/nginx/html/index.html قرار دارد.
نکته: هر فایل شامل ۳ سطح دسترسی مالک فایل (user)، گروه فایل (Group) و دیگران (Others) است.
کاربری که درخواست ارسال کرده، سایت را باز میکند و با خطای ۴۰۳: Forbidden مواجه خواهد شد. برای رفع این مشکل باید اطمینان حاصل کنید که این کاربر، دسترسی لازم برای خواندن این فایل را داشته باشد. این کار با قرار دادن سطح دسترسی روی Others یا دیگران انجام میشد.
۲) استفاده از کدهای مسدودسازی در فایل .htaccess
دلیل دیگری که ممکن است منجر به بروز خطای ۴۰۳ شود، استفاده از کدهای لازم جهت مسدودسازی دسترسی کاربران به یک یا چند فایل است! مدیر سرور یا مالک وبسایت میتواند از اینگونه کدها در فایل .htaccess استفاده کند تا دسترسی کاربران را از بین ببرد. به این ترتیب کاربران غیرمجاز با کد خطای ۴۰۳ مواجه خواهند شد.
۳) فایل index وجود ندارد (Index File Does Not Exist)
اگر امکان Directory Listening فعال نباشد و همزمان کاربری بخواهد محتوای یک پوشه را در سایت مشاهده کند، وبسرور خطای ۴۰۳ را نشان میدهد!
برای مثال اگر کاربر X بخواهد به محتوای http://example.com/emptydir دسترسی پیدا کند و فایل index در پوشه emptydir وجود نداشته باشد، کاربر با خطای ۴۰۳ مواجه خواهد شد.
۴۰۴: Not Found
احتمالاً پرتکرارترین کد خطای پروتکل HTTP همین کد ۴۰۴ باشد! این کد زمانی نمایش داد میشود که آدرس مقصد وجود نداشته باشد. حتی در برخی مواقع URL وارد شده توسط کاربر مشکلی ندارد، اما صفحه مدنظر از سایت مقصد حذف شده است.
در ضمن گاهی ممکن است کد ۴۰۴ بهجای کد ۴۰۳ به کاربر غیرمجاز نمایش داده شود. به این صورت وجود محتوا از چشم کاربر بهطور کامل مخفی میماند.
۴۰۵: Method Not Allowed
این کد زمانی نمایش داده میشود که سرور متد (روش) درخواست دریافتشده را تشخیص میدهد، اما آن را تائید نمیکند.
توجه داشته باشید که ۲ روش GET و HEAD در همه سرورها فعال هستند و نباید آنها را غیرفعال کرد!
۴۰۶: Not Acceptable
اگر سرور پاسخی را برای کاربر آماده کند و این پاسخ توسط Header درخواست کاربر یا Client قابل پذیرش نباشد، کد ۴۰۶ نمایش داده میشود.
۴۰۷: Proxy Authentication Required
این کد مشابه کد ۴۰۱ است. با این تفاوت که برای احراز هویت باید از پراکسی استفاده کنید تا دیگر این کد را مشاهده نکنید.
۴۰۸: Request Timeout
یکی دیگر از کدهای پرتکرار پروتکل HTTP، همین کد ۴۰۸ است! زمانی که اینترنت سرعت پایینی دارد و اتصال بهخوبی برقرار نشود، سرور ترجیح میدهد که این اتصال را قطع کند. کد ۴۰۸ نشاندهنده چنین مشکلی است.
۴۰۹: Conflict
ممکن است درخواستی که شما ارسال میکنید، با وضعیت سرور در آن لحظه تداخل داشته باشد. در چنین مواقعی با کد ۴۰۹ مواجه خواهید شد.
۴۱۰: Gone
اگر برای دریافت محتوایی که بهطور کل پاکشده و به هیچ لینکی ارجاع نشده درخواست بفرستید، با کد خطای ۴۱۰ برخورد خواهید کرد.
البته لازم به ذکر است که این کد موقتی است و چندی پس از حذف کامل صفحه مدنظر، همان کد ۴۰۴ جایگزین میشود.
۴۱۱: Length Required
اگر کاربر در درخواست ارسالی، Header طول محتوا را خالی بگذارد، کد ۴۱۱ نمایش داده میشود. میتوانید با مشخص کردن طول مدنظر در Header مربوطه، مشکل را برطرف کنید.
۴۱۲: Precondition Failed
در Header درخواست ارسال شده توسط کاربر، پیششرطهایی وجود دارند – مثلاً متد یا روش مورداستفاده – که مورد تائید سرور نیست!
۴۱۳: Payload Too Large
کد ۴۱۳ یعنی درخواست ارسالشده به قدری بزرگ است که سرور توانایی پردازش آن را ندارد! معمولاً در چنین شرایط و مواقعی، سرور اتصال با نمایش این کد، اتصال را قطع میکند.
۴۱۴: URI Too Long
هنگامی که کاربر درخواستی بفرستد و URI این درخواست از چیزی که سرور بتواند بررسی کند طولانیتر باشد، این کد خطا را مشاهده خواهید کرد.
URI چیست؟
URI مخفف Uniform Resource Identifier است. این عبارت به معنی دنبالهای منحصربهفرد از کاراکترها است که یک منبع فیزیکی یا منطقی ایجاد شده در وب را معرفی میکند.
۴۱۵: Unsupported Media Type
زمانی که درخواست دریافت رسانهای ارسال شود و این رسانه توسط سرور پشتیبانی نشود، کد ۴۱۵ نمایان خواهد شد.
۴۱۶: Range Not Satisfiable
اگر محدودهای که در Range Header درخواست میشود، در دسترس نباشد، یعنی احتمالاً محدوده مورد بحث، خارج از محدوده سایز دادههای URI است و کد ۴۱۶ به کاربر نشان داده میشود.
۴۱۷: Expectation Failed
اگر انتظاری که در Expect Header درخواستتان تعیین کردهاید، توسط سرور قابل دسترسی نباشد، کد ۴۱۷ نمایش داده خواهد شد.
۴۲۱: Misdirected Request
اگر درخواست به سروری ارسال شود که توانایی پاسخگویی را نداشته باشد، کد ۴۲۱ در صفحه نمایان خواهد شد.
۴۲۲: Unprocessable Entity
شاید درخواست ارسالی از جانب کاربر هیچ ایرادی نداشته باشد، اما در عین حال آن چیزی نباشد که مدنظر او است! در چنین شرایطی کد ۴۲۲ نمایش داده میشود.
۴۲۳: Locked
اگر مقصد (منبع) موردنظر به هر دلیلی قفل باشد یا بهعبارتی دیگر اجازه دسترسی را به هیچ کاربری ندهد، این کد را مشاهده خواهید کرد.
۴۲۶: Upgrade Required
اگر سرور درخواست را بهخاطر قدیمی بودن پروتکل فعلی رد کند، کد ۴۲۶ نمایش داده میشود. این مشکل با آپگرید کردن حل میشود. در ضمن کد ۴۲۶ بههمراه یک Upgrade Header ارسال میشود که در آن نسخه لازم برای رسیدگی به درخواست را مشخص کرده است.
۴۲۹: Too Many Requests
اگر کاربر در یک مدتزمان کوتاه، تعداد درخواست زیادی را برای سرور ارسال کند، با کد خطای ۴۲۹ مواجه خواهید شد.
۴۳۱: Request Header Fields Too Large
کد ۴۳۱ زمانی نمایش داده میشود که Request Header بیشازحد بزرگ باشد. البته پس از کاهش سایز و درخواست مجدد، مشکل حل خواهد شد.
اگر درخواست ارسال شده برای دستیابی به منبعی باشد که قانون دسترسی به آن را منع کرده باشد، کد ۴۵۱ نمایش داده میشود. مثلاً صفحهای در یک وبسایت که با تشخیص مقامات قانونی و مراجع ذیصلاح سانسور شده است!
نکته بسیار مهم: گرچه کدهای کلاس ۴ نشاندهنده مشکل از جانب کاربر هستند، اما در بیشتر مواقع این وبمستر یا مدیر سرور است که میتواند با ایجاد اندکی تغییرات در ساختار سرور، مشکل را بهطورکل رفع کند.
حالا نوبت کدهای خطا مربوط به مشکلات سرور است.
مشکلاتی که در سمت سرور وجود دارند
اگر ایراد از طرف سرور باشد، کد خطایی که نمایش داده میشود با رقم ۵ شروع میشود. در ادامه برخی از مهمترین این کدها را با هم بررسی خواهیم کرد:
۵۰۰: Internal Server Error
این کد زمانی نمایش داده میشود که سرور با مشکلی مواجه شده باشد و نداند راهحل آن را هم نداند!
۵۰۱: Not Implemented
کد خطای ۵۰۱ بیانگر این است که روش (متد) درخواست توسط سرور پشتیبانی نمیشود. همانطور که بالاتر هم گفتیم، تنها متدهایی که تمام سرورها مجبورند آنها را اجرا کنند، دو روش GET و HEAD هستند.
۵۰۲: Bad Gateway
وقتی این کد بهعنوان پاسخ نمایش داده میشود، یعنی زمانی که سرور بهعنوان مدخل ورودی (Gateway) پذیرای درخواست است، یک پاسخ نامعتبر در جواب پیدا میکند.
کد ۵۰۳ این موضوع را بیان میکند که سرور آماده مدیریت و پاسخ به درخواست دریافتی نیست.
معمولاً در مواقعی که سرور به دلیل تعمیرات یا افزایش بیشازحد ظرفیت Down شده باشد با این کد برخورد خواهید کرد. در ضمن همراه این کد، صفحهای نمایان میشود که مشکل را توضیح میدهد. همچنین در صورت امکان، زمان تخمینی رفع این مشکل و بالا آمدن مجدد سرور هم اعلام میشود.
۵۰۴: Gateway Timeout
هنگامی که سرور به عنوان مدخل ورودی (Gateway) فعالیت کند و نتواند در زمان مناسب پاسخگوی درخواست دریافتی باشد، با کد خطای ۵۰۴ یا همان Gateway Timeout مواجه خواهید شد.
۵۰۵: HTTP Version Not Supported
اگر نسخه HTTP که کاربر از آن استفاده میکند، توسط سرور پشتیبانی نشود، با کد خطای ۵۰۵ مواجه خواهید شد.
۵۰۷: Insufficient Storage
اگر سرور فضای لازم برای ذخیرهسازی ملزومات اجرای موفق درخواست را نداشته باشد، روش یا متد درخواستی با کد خطای ۵۰۷ پاسخ داده میشود.
۵۱۰: Not Extended
کد ۵۱۰ این معنا را میدهد که درخواست ارسالی، نیازمند افزونههایی است که سرور بدون آنها نمیتواند درخواست را پردازش و بررسی کند.
۵۱۱: Network Authentication Required
اگر برای دسترسی به یک شبکه خاص نیاز به احراز هویت باشد و کاربری بدون انجام این کار، درخواستی بهمنظور کسب دسترسی ارسال کند، کد خطای ۵۱۱ پاسخی است که دریافت خواهد کرد.
خب حالا بیایید ببینیم برای رفع این خطاها چه کاری از دستمان برمیآید!
عیبیابی کنید!
۳ نکتهای که در ادامه به آنها اشاره خواهیم کرد، میتوانند در رفع خطاهای پروتکل HTTP مفید واقع شوند.
- اگر از مرورگر بهمنظور تست وبسرور استفاده میکنید، پس از ایجاد تغییرات در کانفیگ (تنظیمات) سرور یا وبسرور، حتماً و حتماً باید صفحه مدنظر را دوباره بهروزرسانی (Refresh) کنید.
- اگر میخواهید بدانید درخواست چگونه مدیریت میشوند، میتوانید لاگهای سرور یا همان Server Logs را مورد بررسی قرار دهید. مثلاً وبسرورهای Apache و Nginx برای این منظور دو فایل با نامهای access.log و error.log در اختیار کاربر قرار میدهند. کاربر هم میتواند با استفاده از این دو فایل، اطلاعات بیشتر و کاملتری در این رابطه به دست آورد.
- فراموش نکنید که کدهای خطا، بسته به نوع کانفیگ (تنظیمات) و نرمافزاری که وظیفه بررسی درخواستهای HTTP را دارد، نمایش داده میشوند؛ به زبان ساده: با ایجاد برخی تغییرات میتوان بیشتر مشکلات را رفع و از نمایش کدهای خطا جلوگیری به عمل آورد!
جمعبندی
از این پس هرگاه با کدی برخورد کردید که با عدد ۴ یا ۵ شروع میشود، میدانید که مشکلی پیش آمده! اگر اولین رقم ۴ باشد، ایراد از جانب شما (کاربر) است و اگر اولین رقم ۵ باشد، ایراد از جانب سرور است.
شاید هیچگاه با بسیاری از کدهایی که به آنها اشاره کردیم برخورد نکرده باشید و هیچوقت هم آنها را نبینید؛ اما برخی از آنها هم هستند که هر روز با آنها سروکله میزنید. مثل کد ۴۰۴ یا Not Found.