بررسی خطاها و کدهای رایج در درخواست‌های HTTP

دسته بندی: امنیت
بررسی خطاها و کد های رایج در درخواست های HTTP

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

البته در غیر این‌صورت هم می‌توانید مقاله‌های پروتکل چیست و پروتکل https چیست را بخوانید تا اطلاعات کامل‌تری در این زمینه به دست آورید.

بهتر است بیشتر از این حاشیه نرویم و با مروری بر HTTP و HTTPS شروع کنیم..

HTTP و HTTPS چه هستند؟

پروتکل http مثل یک تونل بزرگ است که اطلاعات از طریق آن بین کامپیوترها جابه‌جا می‌شود. برای همین وقتی آدرس سایت‌ها را وارد می‌کنید، اول اسم بزرگراه اطلاعاتی یعنی همین http می‌آید و بعد به اینترنت می‌گویید:«اطلاعات را از این بزرگراه رد کن بعد برو به آدرس iranserver»

البته آن اوایل اطلاعات خیلی ساده و فقط در حد متن بودند و صفحات هم با زبان استاندارد html نوشته می‌شدند؛ ولی بعداً با پیشرفت تکنولوژی، اوضاع کمی پیچیده‌تر شد و پای تراکنش‌های بانکی یا ردو بدل کردن اطلاعات شخصی مثل سال تولد یا رمز کارت‌های بانکی و … به ماجرا باز شد.

این شد که اهمیت امنیت چندین برابر بیشتر از قبل شد و پروتکل جدیدی به نام https معرفی شد. آن s اضافه https از کلمۀ secure گرفته شده و به معنی امنیت است.

شما با نصب گواهی SSL روی سایت، امنیت این تونل را بالاتر می‌برید و به‌جای http از پروتکل امن https بهره‌مند می‌شوید.

✅ اطلاعات بیشتر درباره SSL را در مقاله گواهی SSL چیست می‌توانید بخوانید.

برای بالا بردن امنیت وب‌سایت و فراهم کردن تجربه‌ای خوب برای کاربران، همین امروز به فکر تهیه یک گواهی SSL معتبر باشید.

خرید گواهینامه SSL        پشتیبانی : ۳۱۷۷۵-۰۵۱

کلاس مختلف کدها در پروتکل HTTP

تمام درخواست‌هایی که از طریق پروتکل HTTP ارسال می‌شوند، پاسخی در قالب یک کد ۳ رقمی دریافت می‌کنند. هرکدام از این کدهای ۳ رقمی، بیانگر وضعیتی مشخص هستند:

  • ۱XX: کدهای ۱۰۰ تا ۱۹۹ اطلاعات گوناگون را نمایش می‌دهند.
  • ۲XX: کدهای ۲۰۰ تا ۲۹۹ نشان دهنده موفقیت در پردازش و بررسی درخواست هستند.
  • ۳XX: کدهای ۳۰۰ تا ۳۹۹ ارجاع شدن را نشان می‌دهند.
  • ۴XX: کدهای ۴۰۰ تا ۴۹۹ بیانگر خطا از جانب کاربر هستند.
  • ۵XX: کدهای ۵۰۰ تا ۵۹۹ خطا از جانب سرور را نمایش می‌دهند.

در این مقاله قصد داریم راجع به کدهای خطا در پروتکل HTTP صبحت کنیم. به همین جهت مشخصاً سراغ کدهای دو دسته‌بندی آخر می‌رویم.

کدهای خطا در پروتکل HTTP

همان‌طور که دیدید، در پروتکل HTTP کدهای ۳ رقمی که با دو عدد ۴ و ۵ شروع شوند، معنای خطا یا ارور را می‌رسانند. این خطا یا از طرف کاربر است یا از طرف سرور.

مشکلاتی که در سمت کاربر وجود دارند

اگر پاسخی که از جانب سرور می‌رسد با رقم ۴ شروع شود، یعنی ایراد از طرف Client یا کاربر است. کدهای بسیار زیادی وجود دارند که با ۴ شروع می‌شوند. در ادامه برخی از مهم‌ترین آن‌ها را معرفی خواهیم کرد:

۴۰۰: Bad Request

زمانی که سرور نتواند درخواست شما را شناسایی کند، خطایی با این کد مشاهده خواهید کرد. دلیل این اتفاق، نامعتبر بودن Syntax (ترکیب‌بندی درخواست ارسالی) است.

ارور 400

۴۰۱: Unauthorized

دسترسی شما در مقام کاربر، تائید نشده است! در صورت مشاهده این کد، باید اقدام به تائید دسترسی خود نمایید.

ارور 401

۴۰۳: Forbidden

نمایش کد ۴۰۳، این معنی را می‌دهد که کاربر حق دسترسی به محتوای مدنظر را ندارد!

نکته: در خطای ۴۰۱، هویت کاربر مشخص نیست، اما در خطای ۴۰۳، سرور کاربر را شناسایی کرده و عدم صلاحیت او را تشخیص داده است!

حتما بخوانید:  ‫‫ظهور دوباره بدافزار StealRat‎

کد خطای 403: ممنوعه

اما دلایلی که منجر به نمایش این کد خطا می‌شوند، موارد زیر هستند:

۱) سطح دسترسی فایل (File Permissions)

خطای ۴۰۳ بیشتر مواقع در چنین موقعیتی رخ می‌دهد:

کاربری که پروسه وب‌سرور را اجرا می‌کند، اجازه دسترسی به فایل درخواست شده را ندارد!

برای نمونه می‌توایند موقعیت زیر را جهت عیب‌یابی یک خطای ۴۰۳ فرض کنید:

  • کاربری درخواست خود را جهت دسترسی به محتوای http://example.com/index.html به وب‌سرور ارسال می‌کند.
  • مالکیت این فرایند در اختیار کاربری با نام www-data است.
  • داخل سرور، فایل HTML در مسیر user/share/nginx/html/index.html قرار دارد.

نکته: هر فایل شامل ۳ سطح دسترسی مالک فایل (user)، گروه فایل (Group) و دیگران (Others) است.

کاربری که درخواست ارسال کرده، سایت را باز می‌کند و با خطای ۴۰۳: Forbidden مواجه خواهد شد. برای رفع این مشکل باید اطمینان حاصل کنید که این کاربر، دسترسی لازم برای خواندن این فایل را داشته باشد. این کار با قرار دادن سطح دسترسی روی Others یا دیگران انجام می‌شد.

۲) استفاده از کدهای مسدودسازی در فایل .htaccess

دلیل دیگری که ممکن است منجر به بروز خطای ۴۰۳ شود، استفاده از کدهای لازم جهت مسدودسازی دسترسی کاربران به یک یا چند فایل است! مدیر سرور یا مالک وب‌سایت می‌تواند از این‌گونه کدها در فایل .htaccess استفاده کند تا دسترسی کاربران را از بین ببرد. به این ترتیب کاربران غیرمجاز با کد خطای ۴۰۳ مواجه خواهند شد. توصیه می‌کنیم مقاله htaccess چیست را بخوانید تا با این مفهوم آشنا شوید.

۳) فایل index وجود ندارد (Index File Does Not Exist)

اگر امکان Directory Listening فعال نباشد و هم‌زمان کاربری بخواهد محتوای یک پوشه را در سایت مشاهده کند، وب‌سرور خطای ۴۰۳ را نشان می‌دهد!

برای مثال اگر کاربر X بخواهد به محتوای http://example.com/emptydir دسترسی پیدا کند و فایل index در پوشه emptydir وجود نداشته باشد، کاربر با خطای ۴۰۳ مواجه خواهد شد.

مقاله‌ای با نام دلایل خطای ۴۰۳ و چگونگی رفع آن در وبلاگ ما وجود دارد که می‌توانید آن را مطالعه کنید.

۴۰۴: Not Found

احتمالاً پرتکرارترین کد خطای پروتکل HTTP همین کد ۴۰۴ باشد! این کد زمانی نمایش داد می‌شود که آدرس مقصد وجود نداشته باشد. حتی در برخی مواقع URL وارد شده توسط کاربر مشکلی ندارد، اما صفحه مدنظر از سایت مقصد حذف شده است.

در ضمن گاهی ممکن است کد ۴۰۴ به‌جای کد ۴۰۳ به کاربر غیرمجاز نمایش داده شود. به این صورت وجود محتوا از چشم کاربر به‌طور کامل مخفی می‌ماند.

کد خطای 404

۴۰۵: Method Not Allowed

این کد زمانی نمایش داده می‌شود که سرور متد (روش) درخواست دریافت‌شده را تشخیص می‌دهد، اما آن را تائید نمی‌کند.

ارور 405

توجه داشته باشید که ۲ روش  GET  و  HEAD در همه سرورها فعال هستند و نباید آن‌ها را غیرفعال کرد!

۴۰۶: Not Acceptable

اگر سرور پاسخی را برای کاربر آماده کند و این پاسخ توسط Header درخواست کاربر یا Client قابل پذیرش نباشد، کد ۴۰۶ نمایش داده می‌شود.

ارور 406

۴۰۷: Proxy Authentication Required

این کد مشابه کد ۴۰۱ است. با این تفاوت که برای احراز هویت باید از پراکسی استفاده کنید تا دیگر این کد را مشاهده نکنید.

ارور 407

۴۰۸: Request Timeout

یکی دیگر از کدهای پرتکرار پروتکل HTTP، همین کد ۴۰۸ است! زمانی که اینترنت سرعت پایینی دارد و اتصال به‌خوبی برقرار نشود، سرور ترجیح می‌دهد که این اتصال را قطع کند. کد ۴۰۸ نشان‌دهنده چنین مشکلی است.

۴۰۹: Conflict

ممکن است درخواستی که شما ارسال می‌کنید، با وضعیت سرور در آن لحظه تداخل داشته باشد. در چنین مواقعی با کد ۴۰۹ مواجه خواهید شد.

۴۱۰: Gone

اگر برای دریافت محتوایی که به‌طور کل پاک‌شده و به هیچ لینکی ارجاع نشده درخواست بفرستید، با کد خطای ۴۱۰ برخورد خواهید کرد.

حتما بخوانید:  فعالسازی let’s encrypt در IIS

البته لازم به ذکر است که این کد موقتی است و چندی پس از حذف کامل صفحه مدنظر، همان کد ۴۰۴ جایگزین می‌شود.

۴۱۱: Length Required

اگر کاربر در درخواست ارسالی، Header طول محتوا را خالی بگذارد، کد ۴۱۱ نمایش داده می‌شود. می‌توانید با مشخص کردن طول مدنظر در Header مربوطه، مشکل را برطرف کنید.

ارور 411

۴۱۲: Precondition Failed

در Header درخواست ارسال شده توسط کاربر، پیش‌شرط‌هایی وجود دارند – مثلاً متد یا روش مورداستفاده – که مورد تائید سرور نیست!

ارور 412

۴۱۳: Payload Too Large

کد ۴۱۳ یعنی درخواست ارسال‌شده به قدری بزرگ است که سرور توانایی پردازش آن را ندارد! معمولاً در چنین شرایط و مواقعی، سرور اتصال با نمایش این کد، اتصال را قطع می‌کند.

کد خطای 413

۴۱۴: URI Too Long

هنگامی که کاربر درخواستی بفرستد و URI این درخواست از چیزی که سرور بتواند بررسی کند طولانی‌تر باشد، این کد خطا را مشاهده خواهید کرد.

URI چیست؟

URI مخفف Uniform Resource Identifier است. این عبارت به معنی دنباله‌ای منحصربه‌فرد از کاراکترها است که یک منبع فیزیکی یا منطقی ایجاد شده در وب را معرفی می‌کند.

۴۱۵: Unsupported Media Type

زمانی که درخواست دریافت رسانه‌ای ارسال شود و این رسانه توسط سرور پشتیبانی نشود، کد ۴۱۵ نمایان خواهد شد.

۴۱۶: Range Not Satisfiable

اگر محدوده‌ای که در Range Header درخواست می‌شود، در دسترس نباشد، یعنی احتمالاً محدوده مورد بحث، خارج از محدوده سایز داده‌های URI است و کد ۴۱۶ به کاربر نشان داده می‌شود.

ارور 416

۴۱۷: Expectation Failed

اگر انتظاری که در Expect Header درخواست‌تان تعیین کرده‌اید، توسط سرور قابل دسترسی نباشد، کد ۴۱۷ نمایش داده خواهد شد.

۴۲۱: Misdirected Request

اگر درخواست به سروری ارسال شود که توانایی پاسخگویی را نداشته باشد، کد ۴۲۱ در صفحه نمایان خواهد شد.

کد خطای 421

۴۲۲: Unprocessable Entity

شاید درخواست ارسالی از جانب کاربر هیچ ایرادی نداشته باشد، اما در عین حال آن چیزی نباشد که مدنظر او است! در چنین شرایطی کد ۴۲۲ نمایش داده می‌شود.

۴۲۳: Locked

اگر مقصد (منبع) موردنظر به هر دلیلی قفل باشد یا به‌عبارتی دیگر اجازه دسترسی را به هیچ کاربری ندهد، این کد را مشاهده خواهید کرد.

۴۲۶: Upgrade Required

اگر سرور درخواست را به‌خاطر قدیمی بودن پروتکل فعلی رد کند، کد ۴۲۶ نمایش داده می‌شود. این مشکل با آپگرید کردن حل می‌شود. در ضمن کد ۴۲۶ به‌همراه یک Upgrade Header ارسال می‌شود که در آن نسخه لازم برای رسیدگی به درخواست را مشخص کرده است.

۴۲۹: Too Many Requests

اگر کاربر در یک مدت‌زمان کوتاه، تعداد درخواست زیادی را برای سرور ارسال کند، با کد خطای ۴۲۹ مواجه خواهید شد.

۴۳۱: Request Header Fields Too Large

کد ۴۳۱ زمانی نمایش داده می‌شود که Request Header بیش‌ازحد بزرگ باشد. البته پس از کاهش سایز و درخواست مجدد، مشکل حل خواهد شد.

۴۵۱: Unavailable For Legal Reasons

اگر درخواست ارسال شده برای دستیابی به منبعی باشد که قانون دسترسی به آن را منع کرده باشد، کد ۴۵۱ نمایش داده می‌شود. مثلاً صفحه‌ای در یک وب‌سایت که با تشخیص مقامات قانونی و مراجع ذیصلاح سانسور شده است!

نکته بسیار مهم: ‌گرچه کدهای کلاس ۴ نشان‌دهنده مشکل از جانب کاربر هستند، اما در بیشتر مواقع این وب‌مستر یا مدیر سرور است که می‌تواند با ایجاد اندکی تغییرات در ساختار سرور، مشکل را به‌طورکل رفع کند.

حالا نوبت کدهای خطا مربوط به مشکلات سرور است.

مشکلاتی که در سمت سرور وجود دارند

اگر ایراد از طرف سرور باشد، کد خطایی که نمایش داده می‌شود با رقم ۵ شروع می‌شود. در ادامه برخی از مهم‌ترین این کدها را با هم بررسی خواهیم کرد:

۵۰۰: Internal Server Error

این کد زمانی نمایش داده می‌شود که سرور با مشکلی مواجه شده باشد و نداند راه‌حل آن را هم نداند!

در مقاله‌ای با عنوان ارور ۵۰۰ چیست و چطور می‌توان آن را رفع کرد، کامل و مفصل راجع به این کد خطا صحبت کرده‌ایم.

حتما بخوانید:  نصب و تنظیمات فایروال CSF

کد 505: خطای داخلی سرور

۵۰۱: Not Implemented

کد خطای ۵۰۱ بیانگر این است که روش (متد) درخواست توسط سرور پشتیبانی نمی‌شود. همان‌طور که بالاتر هم گفتیم، تنها متدهایی که تمام سرورها مجبورند آن‌ها را اجرا کنند، دو روش  GET  و  HEAD  هستند.

۵۰۲: Bad Gateway

وقتی این کد به‌عنوان پاسخ نمایش داده می‌شود، یعنی زمانی که سرور به‌عنوان مدخل ورودی (Gateway) پذیرای درخواست است، یک پاسخ نامعتبر در جواب پیدا می‌کند.

۵۰۳: Service Unavailable

کد ۵۰۳ این موضوع را بیان می‌کند که سرور آماده مدیریت و پاسخ به درخواست دریافتی نیست.

معمولاً در مواقعی که سرور به دلیل تعمیرات یا افزایش بیش‌ازحد ظرفیت Down شده باشد با این کد برخورد خواهید کرد. در ضمن همراه این کد، صفحه‌ای نمایان می‌شود که مشکل را توضیح می‌دهد. همچنین در صورت امکان، زمان تخمینی رفع این مشکل و بالا آمدن مجدد سرور هم اعلام می‌شود.

کد 503: سرویس در دسترس نیست

۵۰۴: Gateway Timeout

هنگامی که سرور به‌ عنوان مدخل ورودی (Gateway) فعالیت کند و نتواند در زمان مناسب پاسخگوی درخواست دریافتی باشد، با کد خطای ۵۰۴ یا همان Gateway Timeout مواجه خواهید شد.

۵۰۵: HTTP Version Not Supported

اگر نسخه HTTP که کاربر از آن استفاده می‌کند، توسط سرور پشتیبانی نشود، با کد خطای ۵۰۵ مواجه خواهید شد.

۵۰۷: Insufficient Storage

اگر سرور فضای لازم برای ذخیره‌سازی ملزومات اجرای موفق درخواست را نداشته باشد، روش یا متد درخواستی با کد خطای ۵۰۷ پاسخ داده می‌شود.

۵۱۰: Not Extended

کد ۵۱۰ این معنا را می‌دهد که درخواست ارسالی، نیازمند افزونه‌هایی است که سرور بدون آن‌ها نمی‌تواند درخواست را پردازش و بررسی کند.

۵۱۱: Network Authentication Required

اگر برای دسترسی به یک شبکه خاص نیاز به احراز هویت باشد و کاربری بدون انجام این کار، درخواستی به‌منظور کسب دسترسی ارسال کند، کد خطای ۵۱۱ پاسخی است که دریافت خواهد کرد.

خب حالا بیایید ببینیم برای رفع این خطاها چه کاری از دستمان برمی‌آید!

عیب‌یابی کنید!

۳ نکته‌ای که در ادامه به آن‌ها اشاره خواهیم کرد، می‌توانند در رفع خطاهای پروتکل HTTP مفید واقع شوند.

عیب یابی به منظور رفع خطاهای پروتکل http

  1. اگر از مرورگر به‌منظور تست وب‌سرور استفاده می‌کنید، پس از ایجاد تغییرات در کانفیگ (تنظیمات) سرور یا وب‌سرور، حتماً و حتماً باید صفحه مدنظر را دوباره به‌روزرسانی (Refresh) کنید.
  2. اگر می‌خواهید بدانید درخواست چگونه مدیریت می‌شوند، می‌توانید لاگ‌های سرور یا همان Server Logs را مورد بررسی قرار دهید. مثلاً وب‌سرورهای Apache و Nginx برای این منظور دو فایل با نام‌های access.log و error.log در اختیار کاربر قرار می‌دهند. کاربر هم می‌تواند با استفاده از این دو فایل، اطلاعات بیشتر و کامل‌تری در این رابطه به دست آورد.
  3. فراموش نکنید که کدهای خطا، بسته به نوع کانفیگ (تنظیمات) و نرم‌افزاری که وظیفه بررسی درخواست‌های HTTP را دارد، نمایش داده می‌شوند؛ به زبان ساده: با ایجاد برخی تغییرات می‌توان بیشتر مشکلات را رفع و از نمایش کدهای خطا جلوگیری به عمل آورد!

جمع‌بندی

از این پس هرگاه با کدی برخورد کردید که با عدد ۴ یا ۵ شروع می‌شود، می‌دانید که مشکلی پیش آمده! اگر اولین رقم ۴ باشد، ایراد از جانب شما (کاربر) است و اگر اولین رقم ۵ باشد، ایراد از جانب سرور است.

شاید هیچ‌گاه با بسیاری از کدهایی که به آن‌ها اشاره کردیم برخورد نکرده باشید و هیچ‌وقت هم آن‌ها را نبینید؛ اما برخی از آن‌ها هم هستند که هر روز با آن‌ها سروکله می‌زنید. مثل کد ۴۰۴ یا Not Found.

اگر سوال یا اطلاعات تکمیلی‌ای در این رابطه دارید، خوشحال می‌شویم که آن را در قسمت‌ کامنت‌ها با ما و دیگر خوانندگان به اشتراک بگذارید.

در ضمن خوب است بدانید که برای نوشتن این مقاله، از سایت معتبر MDN Web Docs کمک گرفته‌ایم.

سپاس برای وقت ارزشمندتان.

مایلید هر دو هفته یک ایمیل مفید دریافت کنید؟

ما را در شبکه‌های اجتماعی دنبال کنید

همچنین شاید دوست داشته باشید!

نظرات کاربران

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.
شما برای ادامه باید با شرایط موافقت کنید

فهرست