-
June 22nd, 2017, 19:43
#1
عضو انجمن
بررسی خطاها و کد های رایج در درخواست های http
زمانی که به یک سایت (سرور) و یا برنامه ای دسترسی پیدا می کنید، تمامی درخواست های HTTP که توسط یک سرور دریافت می شود توسط یک کد خطا پاسخ داده می شوند، این کدهای خطا سه رقمی می باشند که به ۵ بخش مختلف تقسیم می شوند، هر بخش از این کدها، توسط اولین شماره از سمت چپ قابل تشخیص می باشند که در زیر آمده است :
کد PHP:
[LEFT]
1xx: Informational (اطلاعاتی)
2xx: Success (موفق)
3xx: Redirection (انتقال)
4xx: Client Error (خطای کاربری)
5xx: Server Error (خطای سروری)
[/LEFT]
در این آموزش قصد داریم که بروی نحوه شناسایی و رفع مشکلات رایج مربوط به این کدهای تمرکز نماییم و همچنین عواملی که باعث تولید آنها می شوند را مورد بررسی قرار دهیم.
مروری بر خطای های رایج کاربری و سروری (Client Errors and Server Errors)
کدهایی که مشخص کننده خطای های کاربری می باشند، از شماره ۴۰۰ شروع و به ۴۹۹ ختم می شوند؛ این خطا، نتیجه درخواست های ارسالی توسط کاربران می باشد به عنوان مثال باز کردن یک سایت توسط مروگر و یا درخواست های دیگری که توسط کاربران ارسال می شود.
با توجه به اینکه این خطا نشان دهنده مشکلی در سمت کاربر می باشد، با این حال این موارد جهت تشخیص مشکلات کاربر می باشند و یک مدیر سرور می تواند با دانستن آن تغییراتی در پیکربندی سرور در جهت رفع آنها ایجاد نماید.
کدهای مختص به خطای های سروری از ۵۰۰ تا ۵۹۹ می باشند و توسط وب سرور زمانی که با یک خطا در هنگام اجرای درخواست ارسال شده مواجه می شود و یا درخواست ارسال شده توسط وب سرور قابل پردازش نمی باشد، تولید می شوند.
نکته هایی برای عیب یابی مشکلات :
– زمانی که از یک مروگر برای تست یک وبسرور استفاده می کنید، پس از ایجاد تغییرات در کانفیگ سرور و یا وب سرور لازم است که صفحه مرور شده را مجدد بروز رسانی (Refresh) نمایید.
– برای اطلاعات بیشتر در مورد نحوه مدیریت درخواست ها (از جمله پیغام های سیستمی و وب سرور) لازم است که لاگ های سرور (Server Logs) را مورد بررسی قرار دهید، به عنوان مثال وب سرور هایی نظیر Apache و Nginx برای لاگ های خود دو عدد فایل به نام های log و error.log ایجاد می کنند که می توان برای اطلاعات بیشتر به انها رجوع کرد، همانطور که از اسم آنها مشخص است، فایل access.log شامل مجموعه درخواست هایی مرور لینک های یک سایت و فایل error.log شامل خطاهایی که وب سرور با آن مواجه می شود، می باشند.
– در نظر داشته باشید که این کد های خطا بستگی به نوع کانفیگ و نرم افزاری که درخواست های HTTP را کنترل میکنند ، دارد بدین منظور که این موارد به صورت استاندارد می باشند و قابل تغییر می باشند.
اینک با توجه به اطلاعات بالا وقت آن رسیده است که نگاهی به خطاهای رایجی که کاربران ممکن است با آن مواجه شوند، بیاندازیم.
خطا ۴۰۰ درخواست ناصحیح (Bad Request)
خطا ۴۰۰ و به عبارت دیگر درخواست ناصحیح : درخواست HTTP ارسال شده به سرور دارای نگارش ناصحیح (syntax Error)می باشد.
در اینجا به چند مثال رایج که موجب بروز خطای ۴۰۰ می شوند می پردازیم :
– کوکی های کاربر(The user’s Cookie) که مرتبط با سایت مورد نظر است مخدوش می باشند، ممکن است با خالی کردن کش و کوکی(Cache and Cookies) مرورگر، این مشکل برطرف شود.
– درخواست ناقص که از طریق یک مروگر معیوب و خراب ارسال شده باشد.
– درخواست ناقص ناشی از خطای انسانی زمانی که درخواست های HTTP به صورت دستی شکل گرفته اند، مانند استفاده از کتابخانه Curl .
خطا ۴۰۱، دسترسی غیر مجاز (Unauthorized)
خطا ۴۰۱ و یا دسترس غیر مجاز : کاربر مورد نظر اجازه دسترسی به موارد خواسته شده را ندارد به عبارت دیگر کاربر تایید نشده است و یا روند تایید آن صحیح نمی باشد، کاربر برای دسترسی باید نام کاربری و رمز عبور را به درستی وارد نماید، تا بتواند منابع محافظت شده را مشاهده کند.
مثالی که در این باره می توان زد این است که اگر کاربری بخواهد به یک سایت که توسط اعتبار سنجی HTTP محافظت میشود ، دسترسی پیدا کند در صورتی که نام کاربری و رمز عبور خود را وارد ننماید خطای ۴۰۱ Unauthorized را دریافت خواهد کرد، از این رو ، لازم است که از نام کاربری و رمز عبوری که در فایل .htpasswd موجود است، استفاده نمایید. در نظر داشته باشید که پسورد در این گونه فایل ها کد شده می باشد. به عنوان مثال می توان به سایت های دانلود فیلم اشاره کرد.
خطا ۴۰۳، ممنوع (Forbidden)
کد خطا ۴۰۳ و یا خطای ممنوعه : کاربر درخواست صحیح ارسال میکند اما سرور آن درخواست را به دلیل نبود دسترسی مجاز به منابع درخواست شده رد می کند، اگر شما با خطای ۴۰۳ به صورت غیر منتظرانه برخورد می کنید ، این امر ممکن است به یکی از دلایلی که در زیر توضیح داده شده است، مرتبط باشد :
۱- سطح دسترسی فایل (File Permissions)
به طور معمول خطای ۴۰۳ بیشتر زمانی رخ میدهد، که کاربری که پروسه وب سرور را اجرا می کند ( در سیستم های لینوکسی معمولا apache, access,nobody کاربران رایج سیستمی می باشند که وب سرور را در سرور اجرا می کنند) دسترسی لازم به فایل درخواست شده توسط یک کاربر دیگر را ندارد. معمولا فایل مورد نظر دسترسی خواندن توسط وب سرور را ندارد، لذا کاربران هنگام مشاهده این فایل توسط یک مرورگر با این خطا مواجه خواهند شد.
برای نمونه می توانید موقعیت زیر را جهت عیب یابی یک خطای ۴۰۳ فرض نمایید :
– یک کاربر درخواست خود را جهت دسترسی به محتوای http://example.com/index.html به وب سرور ارسال می کند.
– مالکیت این فرایند در سطح سیستمی کاربری به نام www-data می باشد
– در داخل سرور فایل html در مسیر زیر قرار دارد : usr/share/nginx/html/index.html
کاربر این سایت را باز میکند و خطای ۴۰۳ Forbidden دریافت می کند! ابتدا مطمئن شوید که کاربر سیستمی www-data دسترسی لازم برای خواندن این فایل را داشته باشد، در لینوکس دسترسی فایل های به صورت معمول بروی ۶۴۴ و فولدر های ۷۵۵ می باشند، به عنوان مثال شما می توانید از طریق دستور ls –la سطح دسترسی یک فایل و یا فولدر را بررسی نمایید، در این مثال ما به گروه Other و یا دیگران دسترسی خواندن می دهیم تا کاربر www-data بتواند به فایل دسترسی پیدا کند.
کد PHP:
sudo chmod o=r /usr/share/nginx/html/index.html
هر فایل شامل ۳ سطح دسترسی می باشد، مالک فایل یا User، گروه فایل یا Group و در انتها Others یا دیگران
۲- .htaccess
یکی دیگر از احتمالاتی که باعث بروز خطای ۴۰۳ می شود، استفاده از کدها (rules) مربوط به وب سرور جهت مسدود سازی دسترسی کاربران به یک یا چند فایل می باشد، بدین منظور مدیر سرور و یا مالک وبسایت می تواند از این گونه کد ها در فایل .htaccess استفاده نماید تا دسترس کاربران را مسدود کند.
۳- فایل index وجود ندارد (Index File Does Not Exist)
اگر کاربری بخواهد محتوای یک پوشه سایتی را مشاهده کند که فاقد index باشد، در صورتی که امکان directory listening فعال نباشد، وب سرور خطای ۴۰۳ Forbidden را نمایش می دهد.
به عنوان مثال اگر کاربری بخواهد به محتوای http://example.com/emptydir/ دسترسی پیدا کند و در پوشه emptydir فایل index وجود نداشته باشد، کاربر با خطای ۴۰۳ مواجه خواهد شد.
خطا ۴۰۴، پیدا نشد. (Not Found)
کد خطا ۴۰۴ و یا خطای پیدا نشد (Not Found) : کاربر قادر به ارتباط با سرور می باشد اما قادر به شناسایی موقعیت و مکان فایل درخواستی توسط وبسرور نیست.
خطای ۴۰۴ ممکن است به دلایل مختلف رخ دهد. اگر کاربری به صورت غیر منتظرانه خطای ۴۰۴ Not Found دریافت می کند در زیر نمونه سوالاتی است که می توانید در هنگام عیب یابی مطرح نمایید:
– آیا لینکی که کاربران را به سرور شما هدایت می کند دارای غلط نوشتاری می باشد ( صحیح می باشد) ؟
– آیا فایل در مکان درخواست شده، موجود می باشد؟ ایا منابع درخواستی پاک شده و یا انتقال داده شده اند؟
– آیا در تنظیمات سرور مکان و موقعیت document root به درستی وارد شده است؟
– آیا کاربر که مالک فرایند و پروسه مرتبط با وبسرور(Web Server Worker Process) می باشد، دسترسی عبور از پوشه های که فایل مورد نظر درخواست شده را دارد؟
– آیا فایل درخواستی از طریق یک Symbolic link قابل دسترس است ؟ اگر بدین صورت می باشد پس مطمئن شوید که قابلیت follow symbolic links برای وبسرور فعال باشد
خطا ۵۰۰، خطای داخلی سرور (Internal Server Error)
خطا کد ۵۰۰ و یا خطای داخلی : سرور قادر به پردازش درخواست مورد نظر به دلیل نامعلوم نمی باشد.
بیشترین دلیلی که منجر به بروز این خطا می شود، پیکربندی ناصحیح سرور است، به عنوان مثال فرمت ناصحیح فایل .htaccess و یا نبود بسته (Package) مرتبط با وبسرور جهت پردازش صحیح درخواست ها.
خطا ۵۰۲، گذرگاه ناصحیح (Bad Gateway)
خطا کد ۵۰۲ و یا خطای Bad Gateway : سرور مورد دسترسی، یک گذرگاه ( Gateway ) و یا پراکسی سرور (***** Server) می باشد، و این سرور پاسخ درستی از سرورها زیر مجموعه خود (Backend Servers) دریافت نمی کند، در واقع سرور های Backend مسئولیت اجرای درخواست ها و ارسال آنها به سرور گذرگاه (Gateway) را بر عهده دارند.
اگر سرور مورد نظر شما یک سرور Reverse ***** مانند Load balancer می باشد، در اینجا چند چیز است که لازم است بررسی شوند:
– سرورهای اصلی ( Backend servers ) که درخواست های HTTP در حال ارسال می باشند، فاقد مشکل باشند.
– سرور پراکسی به صورت صحیح با Backends مشخص و صحیح پیکربندی شده است.
– ارتباط بین سرور های Backends و ***** server سالم باشد. اگر سرورها قادر به ارتباط از طریق Port دیگری می باشند، مطمئن شوید که فایروال سرور اجازه دسترسی بین آن ها را داده است.
– اگر برنامه وب شما، به صورتی پیکربندی شده است که از طریق یک سوکت (Socket) ارتباط دارد، مطمئن شوید که سوکت مورد نظر در مکان صحیح وجود دارد و دارای سطح دسترسی صحیح می باشد.
خطا ۵۰۴، عدم دسترسی به گذرگاه (Gateway Timeout)
کد خطا ۵۰۴ یا خطای Gateway timeout : سرور یک ***** و Gateway می باشد و امکان دریافت پاسخ از سرور های Backend در زمان مشخص شده، ندارد، به عبارتی سرور های Backend در دسترس نمی باشند.
این مشکل اغلب در موقعیت های زیر رخ می دهد :
– ارتباط بین سرور ها ضعیف می باشد.
– سرور backend درخواست ها دریافتی را با سرعت کمی پردازش می کند که این به دلیل ضعف و یا کمبود منابع سرور می باشد.
– مدت زمان پاسخ درخواست ها و دریافت آن توسط Gateway و یا ***** server کوتاه تنظیم شده است.
منبع :
https://goo.gl/TXdZmh
ویرایش توسط iranserver.com : June 22nd, 2017 در ساعت 19:44
-
تعداد تشکر ها ازiranserver.com به دلیل پست مفید
-
June 22nd, 2017 19:43
# ADS