در نوشتن این مقاله، فرض را بر این گرفتهایم که شما به عنوان خواننده، با تعاریف پایه و اساسی مثل تعریف پروتکل آشنا هستید. بنابراین آشنایی با کدهای خطا در پروتکل HTTP هم به کارتان خواهد آمد. (البته جالب اینجاست که تمام کدهای پاسخ در HTTP لزوماً بیانگر خطا نیستند!)
البته در غیر اینصورت هم میتوانید مقالههای پروتکل چیست و پروتکل https چیست را بخوانید تا اطلاعات کاملتری در این زمینه به دست آورید.
بهتر است بیشتر از این حاشیه نرویم و با مروری بر HTTP و HTTPS شروع کنیم..
HTTP و HTTPS چه هستند؟
پروتکل http مثل یک تونل بزرگ است که اطلاعات از طریق آن بین کامپیوترها جابهجا میشود. برای همین وقتی آدرس سایتها را وارد میکنید، اول اسم بزرگراه اطلاعاتی یعنی همین http میآید و بعد به اینترنت میگویید:«اطلاعات را از این بزرگراه رد کن بعد برو به آدرس iranserver»
البته آن اوایل اطلاعات خیلی ساده و فقط در حد متن بودند و صفحات هم با زبان استاندارد html نوشته میشدند؛ ولی بعداً با پیشرفت تکنولوژی، اوضاع کمی پیچیدهتر شد و پای تراکنشهای بانکی یا ردو بدل کردن اطلاعات شخصی مثل سال تولد یا رمز کارتهای بانکی و … به ماجرا باز شد.
این شد که اهمیت امنیت چندین برابر بیشتر از قبل شد و پروتکل جدیدی به نام https معرفی شد. آن s اضافه https از کلمۀ secure گرفته شده و به معنی امنیت است.
شما با نصب گواهی SSL روی سایت، امنیت این تونل را بالاتر میبرید و بهجای http از پروتکل امن https بهرهمند میشوید.
✅ اطلاعات بیشتر درباره SSL را در مقاله گواهی SSL چیست میتوانید بخوانید.
برای بالا بردن امنیت وبسایت و فراهم کردن تجربهای خوب برای کاربران، همین امروز به فکر تهیه یک گواهی SSL معتبر باشید.
خرید گواهینامه SSL پشتیبانی : ۳۱۷۷۶-۰۵۱کلاس مختلف کدها در پروتکل HTTP
تمام درخواستهایی که از طریق پروتکل HTTP ارسال میشوند، پاسخی در قالب یک کد 3 رقمی دریافت میکنند. هرکدام از این کدهای 3 رقمی، بیانگر وضعیتی مشخص هستند:
- 1XX: کدهای 100 تا 199 اطلاعات گوناگون را نمایش میدهند.
- 2XX: کدهای 200 تا 299 نشان دهنده موفقیت در پردازش و بررسی درخواست هستند.
- 3XX: کدهای 300 تا 399 ارجاع شدن را نشان میدهند.
- 4XX: کدهای 400 تا 499 بیانگر خطا از جانب کاربر هستند.
- 5XX: کدهای 500 تا 599 خطا از جانب سرور را نمایش میدهند.
در این مقاله قصد داریم راجع به کدهای خطا در پروتکل HTTP صبحت کنیم. به همین جهت مشخصاً سراغ کدهای دو دستهبندی آخر میرویم.
کدهای خطا در پروتکل HTTP
همانطور که دیدید، در پروتکل HTTP کدهای 3 رقمی که با دو عدد 4 و 5 شروع شوند، معنای خطا یا ارور را میرسانند. این خطا یا از طرف کاربر است یا از طرف سرور.
مشکلاتی که در سمت کاربر وجود دارند
اگر پاسخی که از جانب سرور میرسد با رقم 4 شروع شود، یعنی ایراد از طرف Client یا کاربر است. کدهای بسیار زیادی وجود دارند که با 4 شروع میشوند. در ادامه برخی از مهمترین آنها را معرفی خواهیم کرد:
400: Bad Request
زمانی که سرور نتواند درخواست شما را شناسایی کند، خطایی با این کد مشاهده خواهید کرد. دلیل این اتفاق، نامعتبر بودن Syntax (ترکیببندی درخواست ارسالی) است.
دسترسی شما در مقام کاربر، تائید نشده است! در صورت مشاهده این کد، باید اقدام به تائید دسترسی خود نمایید.
403: Forbidden
نمایش کد 403، این معنی را میدهد که کاربر حق دسترسی به محتوای مدنظر را ندارد!
نکته: در خطای 401، هویت کاربر مشخص نیست، اما در خطای 403، سرور کاربر را شناسایی کرده و عدم صلاحیت او را تشخیص داده است!
اما دلایلی که منجر به نمایش این کد خطا میشوند، موارد زیر هستند:
1) سطح دسترسی فایل (File Permissions)
خطای 403 بیشتر مواقع در چنین موقعیتی رخ میدهد:
کاربری که پروسه وبسرور را اجرا میکند، اجازه دسترسی به فایل درخواست شده را ندارد!
برای نمونه میتوایند موقعیت زیر را جهت عیبیابی یک خطای 403 فرض کنید:
- کاربری درخواست خود را جهت دسترسی به محتوای http://example.com/index.html به وبسرور ارسال میکند.
- مالکیت این فرایند در اختیار کاربری با نام www-data است.
- داخل سرور، فایل HTML در مسیر user/share/nginx/html/index.html قرار دارد.
نکته: هر فایل شامل 3 سطح دسترسی مالک فایل (user)، گروه فایل (Group) و دیگران (Others) است.
کاربری که درخواست ارسال کرده، سایت را باز میکند و با خطای 403: Forbidden مواجه خواهد شد. برای رفع این مشکل باید اطمینان حاصل کنید که این کاربر، دسترسی لازم برای خواندن این فایل را داشته باشد. این کار با قرار دادن سطح دسترسی روی Others یا دیگران انجام میشد.
2) استفاده از کدهای مسدودسازی در فایل .htaccess
دلیل دیگری که ممکن است منجر به بروز خطای 403 شود، استفاده از کدهای لازم جهت مسدودسازی دسترسی کاربران به یک یا چند فایل است! مدیر سرور یا مالک وبسایت میتواند از اینگونه کدها در فایل .htaccess استفاده کند تا دسترسی کاربران را از بین ببرد. به این ترتیب کاربران غیرمجاز با کد خطای 403 مواجه خواهند شد. توصیه میکنیم مقاله htaccess چیست را بخوانید تا با این مفهوم آشنا شوید.
3) فایل index وجود ندارد (Index File Does Not Exist)
اگر امکان Directory Listening فعال نباشد و همزمان کاربری بخواهد محتوای یک پوشه را در سایت مشاهده کند، وبسرور خطای 403 را نشان میدهد!
برای مثال اگر کاربر X بخواهد به محتوای http://example.com/emptydir دسترسی پیدا کند و فایل index در پوشه emptydir وجود نداشته باشد، کاربر با خطای 403 مواجه خواهد شد.
مقالهای با نام دلایل خطای 403 و چگونگی رفع آن در وبلاگ ما وجود دارد که میتوانید آن را مطالعه کنید.
404: Not Found
احتمالاً پرتکرارترین کد خطای پروتکل HTTP همین کد 404 باشد! این کد زمانی نمایش داد میشود که آدرس مقصد وجود نداشته باشد. حتی در برخی مواقع URL وارد شده توسط کاربر مشکلی ندارد، اما صفحه مدنظر از سایت مقصد حذف شده است.
در ضمن گاهی ممکن است کد 404 بهجای کد 403 به کاربر غیرمجاز نمایش داده شود. به این صورت وجود محتوا از چشم کاربر بهطور کامل مخفی میماند.
405: Method Not Allowed
این کد زمانی نمایش داده میشود که سرور متد (روش) درخواست دریافتشده را تشخیص میدهد، اما آن را تائید نمیکند.
توجه داشته باشید که 2 روش GET و HEAD در همه سرورها فعال هستند و نباید آنها را غیرفعال کرد!
406: Not Acceptable
اگر سرور پاسخی را برای کاربر آماده کند و این پاسخ توسط Header درخواست کاربر یا Client قابل پذیرش نباشد، کد 406 نمایش داده میشود.
407: Proxy Authentication Required
این کد مشابه کد 401 است. با این تفاوت که برای احراز هویت باید از پراکسی استفاده کنید تا دیگر این کد را مشاهده نکنید.
408: Request Timeout
یکی دیگر از کدهای پرتکرار پروتکل HTTP، همین کد 408 است! زمانی که اینترنت سرعت پایینی دارد و اتصال بهخوبی برقرار نشود، سرور ترجیح میدهد که این اتصال را قطع کند. کد 408 نشاندهنده چنین مشکلی است.
409: Conflict
ممکن است درخواستی که شما ارسال میکنید، با وضعیت سرور در آن لحظه تداخل داشته باشد. در چنین مواقعی با کد 409 مواجه خواهید شد.
410: Gone
اگر برای دریافت محتوایی که بهطور کل پاکشده و به هیچ لینکی ارجاع نشده درخواست بفرستید، با کد خطای 410 برخورد خواهید کرد.
البته لازم به ذکر است که این کد موقتی است و چندی پس از حذف کامل صفحه مدنظر، همان کد 404 جایگزین میشود.
411: Length Required
اگر کاربر در درخواست ارسالی، Header طول محتوا را خالی بگذارد، کد 411 نمایش داده میشود. میتوانید با مشخص کردن طول مدنظر در Header مربوطه، مشکل را برطرف کنید.
412: Precondition Failed
در Header درخواست ارسال شده توسط کاربر، پیششرطهایی وجود دارند – مثلاً متد یا روش مورداستفاده – که مورد تائید سرور نیست!
413: Payload Too Large
کد 413 یعنی درخواست ارسالشده به قدری بزرگ است که سرور توانایی پردازش آن را ندارد! معمولاً در چنین شرایط و مواقعی، سرور اتصال با نمایش این کد، اتصال را قطع میکند.
414: URI Too Long
هنگامی که کاربر درخواستی بفرستد و URI این درخواست از چیزی که سرور بتواند بررسی کند طولانیتر باشد، این کد خطا را مشاهده خواهید کرد.
URI چیست؟
URI مخفف Uniform Resource Identifier است. این عبارت به معنی دنبالهای منحصربهفرد از کاراکترها است که یک منبع فیزیکی یا منطقی ایجاد شده در وب را معرفی میکند.
415: Unsupported Media Type
زمانی که درخواست دریافت رسانهای ارسال شود و این رسانه توسط سرور پشتیبانی نشود، کد 415 نمایان خواهد شد.
416: Range Not Satisfiable
اگر محدودهای که در Range Header درخواست میشود، در دسترس نباشد، یعنی احتمالاً محدوده مورد بحث، خارج از محدوده سایز دادههای URI است و کد 416 به کاربر نشان داده میشود.
417: Expectation Failed
اگر انتظاری که در Expect Header درخواستتان تعیین کردهاید، توسط سرور قابل دسترسی نباشد، کد 417 نمایش داده خواهد شد.
421: Misdirected Request
اگر درخواست به سروری ارسال شود که توانایی پاسخگویی را نداشته باشد، کد 421 در صفحه نمایان خواهد شد.
422: Unprocessable Entity
شاید درخواست ارسالی از جانب کاربر هیچ ایرادی نداشته باشد، اما در عین حال آن چیزی نباشد که مدنظر او است! در چنین شرایطی کد 422 نمایش داده میشود.
423: Locked
اگر مقصد (منبع) موردنظر به هر دلیلی قفل باشد یا بهعبارتی دیگر اجازه دسترسی را به هیچ کاربری ندهد، این کد را مشاهده خواهید کرد.
426: Upgrade Required
اگر سرور درخواست را بهخاطر قدیمی بودن پروتکل فعلی رد کند، کد 426 نمایش داده میشود. این مشکل با آپگرید کردن حل میشود. در ضمن کد 426 بههمراه یک Upgrade Header ارسال میشود که در آن نسخه لازم برای رسیدگی به درخواست را مشخص کرده است.
429: Too Many Requests
اگر کاربر در یک مدتزمان کوتاه، تعداد درخواست زیادی را برای سرور ارسال کند، با کد خطای 429 مواجه خواهید شد.
431: Request Header Fields Too Large
کد 431 زمانی نمایش داده میشود که Request Header بیشازحد بزرگ باشد. البته پس از کاهش سایز و درخواست مجدد، مشکل حل خواهد شد.
اگر درخواست ارسال شده برای دستیابی به منبعی باشد که قانون دسترسی به آن را منع کرده باشد، کد 451 نمایش داده میشود. مثلاً صفحهای در یک وبسایت که با تشخیص مقامات قانونی و مراجع ذیصلاح سانسور شده است!
نکته بسیار مهم: گرچه کدهای کلاس 4 نشاندهنده مشکل از جانب کاربر هستند، اما در بیشتر مواقع این وبمستر یا مدیر سرور است که میتواند با ایجاد اندکی تغییرات در ساختار سرور، مشکل را بهطورکل رفع کند.
حالا نوبت کدهای خطا مربوط به مشکلات سرور است.
مشکلاتی که در سمت سرور وجود دارند
اگر ایراد از طرف سرور باشد، کد خطایی که نمایش داده میشود با رقم 5 شروع میشود. در ادامه برخی از مهمترین این کدها را با هم بررسی خواهیم کرد:
500: Internal Server Error
این کد زمانی نمایش داده میشود که سرور با مشکلی مواجه شده باشد و نداند راهحل آن را هم نداند!
در مقالهای با عنوان ارور 500 چیست و چطور میتوان آن را رفع کرد، کامل و مفصل راجع به این کد خطا صحبت کردهایم.
501: Not Implemented
کد خطای 501 بیانگر این است که روش (متد) درخواست توسط سرور پشتیبانی نمیشود. همانطور که بالاتر هم گفتیم، تنها متدهایی که تمام سرورها مجبورند آنها را اجرا کنند، دو روش GET و HEAD هستند.
502: Bad Gateway
وقتی این کد بهعنوان پاسخ نمایش داده میشود، یعنی زمانی که سرور بهعنوان مدخل ورودی (Gateway) پذیرای درخواست است، یک پاسخ نامعتبر در جواب پیدا میکند.
کد 503 این موضوع را بیان میکند که سرور آماده مدیریت و پاسخ به درخواست دریافتی نیست.
معمولاً در مواقعی که سرور به دلیل تعمیرات یا افزایش بیشازحد ظرفیت Down شده باشد با این کد برخورد خواهید کرد. در ضمن همراه این کد، صفحهای نمایان میشود که مشکل را توضیح میدهد. همچنین در صورت امکان، زمان تخمینی رفع این مشکل و بالا آمدن مجدد سرور هم اعلام میشود.
بیشتر بخوانید: ارور 503 چیست؟ بررسی علت به وجود آمدن و رفع خطای 503 با 10 روش
504: Gateway Timeout
هنگامی که سرور به عنوان مدخل ورودی (Gateway) فعالیت کند و نتواند در زمان مناسب پاسخگوی درخواست دریافتی باشد، با کد خطای 504 یا همان Gateway Timeout مواجه خواهید شد.
505: HTTP Version Not Supported
اگر نسخه HTTP که کاربر از آن استفاده میکند، توسط سرور پشتیبانی نشود، با کد خطای 505 مواجه خواهید شد.
507: Insufficient Storage
اگر سرور فضای لازم برای ذخیرهسازی ملزومات اجرای موفق درخواست را نداشته باشد، روش یا متد درخواستی با کد خطای 507 پاسخ داده میشود.
510: Not Extended
کد 510 این معنا را میدهد که درخواست ارسالی، نیازمند افزونههایی است که سرور بدون آنها نمیتواند درخواست را پردازش و بررسی کند.
511: Network Authentication Required
اگر برای دسترسی به یک شبکه خاص نیاز به احراز هویت باشد و کاربری بدون انجام این کار، درخواستی بهمنظور کسب دسترسی ارسال کند، کد خطای 511 پاسخی است که دریافت خواهد کرد.
خب حالا بیایید ببینیم برای رفع این خطاها چه کاری از دستمان برمیآید!
عیبیابی کنید!
3 نکتهای که در ادامه به آنها اشاره خواهیم کرد، میتوانند در رفع خطاهای پروتکل HTTP مفید واقع شوند.
- اگر از مرورگر بهمنظور تست وبسرور استفاده میکنید، پس از ایجاد تغییرات در کانفیگ (تنظیمات) سرور یا وبسرور، حتماً و حتماً باید صفحه مدنظر را دوباره بهروزرسانی (Refresh) کنید.
- اگر میخواهید بدانید درخواست چگونه مدیریت میشوند، میتوانید لاگهای سرور یا همان Server Logs را مورد بررسی قرار دهید. مثلاً وبسرورهای Apache و Nginx برای این منظور دو فایل با نامهای access.log و error.log در اختیار کاربر قرار میدهند. کاربر هم میتواند با استفاده از این دو فایل، اطلاعات بیشتر و کاملتری در این رابطه به دست آورد.
- فراموش نکنید که کدهای خطا، بسته به نوع کانفیگ (تنظیمات) و نرمافزاری که وظیفه بررسی درخواستهای HTTP را دارد، نمایش داده میشوند؛ به زبان ساده: با ایجاد برخی تغییرات میتوان بیشتر مشکلات را رفع و از نمایش کدهای خطا جلوگیری به عمل آورد!
جمعبندی
از این پس هرگاه با کدی برخورد کردید که با عدد 4 یا 5 شروع میشود، میدانید که مشکلی پیش آمده! اگر اولین رقم 4 باشد، ایراد از جانب شما (کاربر) است و اگر اولین رقم 5 باشد، ایراد از جانب سرور است.
شاید هیچگاه با بسیاری از کدهایی که به آنها اشاره کردیم برخورد نکرده باشید و هیچوقت هم آنها را نبینید؛ اما برخی از آنها هم هستند که هر روز با آنها سروکله میزنید. مثل کد 404 یا Not Found.
اگر سوال یا اطلاعات تکمیلیای در این رابطه دارید، خوشحال میشویم که آن را در قسمت کامنتها با ما و دیگر خوانندگان به اشتراک بگذارید.
در ضمن خوب است بدانید که برای نوشتن این مقاله، از سایت معتبر MDN Web Docs کمک گرفتهایم.
سپاس برای وقت ارزشمندتان.