بررسی خطاها و کدهای رایج در درخواست‌های 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 ارسال می‌شوند، پاسخی در قالب یک کد 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 (ترکیب‌بندی درخواست ارسالی) است.

ارور 400

401: Unauthorized

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

ارور 401

403: Forbidden

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

نکته: در خطای 401، هویت کاربر مشخص نیست، اما در خطای 403، سرور کاربر را شناسایی کرده و عدم صلاحیت او را تشخیص داده است!

حتما بخوانید:  دلایل بسته بودن برخی توابع حساس در سرور

کد خطای 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 به کاربر غیرمجاز نمایش داده شود. به این صورت وجود محتوا از چشم کاربر به‌طور کامل مخفی می‌ماند.

کد خطای 404

405: Method Not Allowed

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

ارور 405

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

406: Not Acceptable

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

ارور 406

407: Proxy Authentication Required

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

ارور 407

408: Request Timeout

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

409: Conflict

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

410: Gone

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

حتما بخوانید:  تهدید جدید امنیتی coinminer

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

411: Length Required

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

ارور 411

412: Precondition Failed

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

ارور 412

413: Payload Too Large

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

کد خطای 413

414: URI Too Long

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

URI چیست؟

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

415: Unsupported Media Type

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

416: Range Not Satisfiable

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

ارور 416

417: Expectation Failed

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

421: Misdirected Request

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

کد خطای 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: Unavailable For Legal Reasons

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

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

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

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

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

500: Internal Server Error

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

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

حتما بخوانید:  رفع آسیب پذیری احراز اصالت در MongoDB

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

501: Not Implemented

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

502: Bad Gateway

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

503: Service Unavailable

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

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

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

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 مفید واقع شوند.

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

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

جمع‌بندی

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

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

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

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

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

5/5 - (1 امتیاز)

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

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

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

آموزش نصب و پیکربندی WAF

آموزش نصب و پیکربندی WAF

0
Firewall به اختصار WAF، سرویس یا ماژولی برای افزایش امنیت وب‌سایت است که وظیفه کنترل ترافیک ورودی به وب‌سایت را بر عهده می‌گیرد. این نرم‌افزار…
مقاله آسیب پذیری های وردپرس

آسیب پذیری های کشف شده در وردپرس (July 2022)

0
همانطور که می‌دانید ما در ایران سرور بررسی آسیب‌پذیری‌ها و ارائه بروزترین آموزش‌ها در حوزه امنیت را یکی از مهم‌ترین رسالت‌های خود می‌دانیم. به همین…

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

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

نشانی ایمیل شما منتشر نخواهد شد.

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

فهرست