درباره وب سرور IIS ( مفاهیم ISAPI Extension و ISAPI Filter و CGI و ASP )

در این مقاله برای شما روش های توسعه یا Extend کردن وب سرور IIS با استفاده از Extension های آن برای بالا بردن کارایی های آن را توضیح خواهیم داد. خوب برای اینکه کارایی های IIS را توسعه دهیم روش های متعددی وجود دارد که از آن جمله می توان به استفاده از ISAPI Extension ها ، ISAPI Filter ها و همچنین CGI و همچنین ASP و PHP اشاره کرد. در ابتدای این مقاله ابتدا به بررسی ماهیت Extension و منظور از بکار بردن واژه Extension برای IIS اشاره می کنیم و سپس به معرفی ISAPI Extension و ISAPI Filter می رسیم ، در این قسمت به تفاوت های بین Filter ها و Extension ها را توضیح خواهیم داد . در نهایت کمی در خصوص CGI و سایر Extension های موجود صحبت خواهیم کرد و بصورت ویژه در خصوص ASP.NET و PHP توضیحاتی را ارائه می دهیم . در همینجا متذکر می شوم که این مقاله برای معرفی این قابلیت ها می باشد و در آن چیزی در خصوص شیوه برنامه نویسی و کد نویسی برای Extension ها اشاره نشده است ، صرفا هدف معرفی ماهیت این موجودیت ها در IIS می باشد .

Extension در IIS به چه معناست ؟

در اینجا شاید برای شما هم این سئوال پیش بیاید که اصلا Extension چیست و در IIS به چه معناست ؟ جالب اینجاست که با اینکه چند وقتی در اینترنت و چندین کتاب مختلف در خصوص مفهوم Extension جستجوهایی انجام دادم اما در هیچکدام تعریف درستی از Extension ارائه داده نشده بود . اما در نهایت به یک تعریف و مثال برای باز کردن مفهوم Extension ها در IIS رسیدم ، Extension ها ابزارهای جانبی هستند که به وب سرور IIS این امکان را می دهند که قابلیت هایی بیش از آنچه که بصورت پیشفرض برایش تعریف شده داشته باشد ، این مثال را می توان به سیستم عامل ویندوز ربط داد ، شما زمانیکه سیستم عامل ویندوز را خریداری می کنید ( البته نه از سوپر مارکت بلکه از نمایندگی مایکروسافت ) ابزارهایی که بر روی آن وجود دارند یک سری امکانات پیشفرض را به شما ارائه می دهند ، برای مثال ابزار WordPad برای تایپ مطالب ، ابزار Paint برای کشیدن نقاشی یا طرح و …. در بسیاری اوقات این ابزارها کار شما را راه می اندازند و شما نیازی به ابزار جانبی نخواهید داشت ، اما برخی اوقات نیازهای شما فراتر از آن چیزی است که ویندوز در اختیار شما قرار می دهد بنابراین مجبور می شوید که یک نرم افزار تخصصی را در این زمینه خریداری کنید که البته با سیسنم عامل ویندوز شما هماهنگی دارد ، مثلا به جای استفاده از WordPad از Office Word استفاده می کنید. این دقیقا همان چیزی است که در خصوص Extension ها در IIS وجود دارد ، شما برای اینکه بتوانید از قابلیت های پیشرفته IIS استفاده کنید از Extension هایی که برای اینکار ساخته شده اند استفاده می کنید ، البته برخی از این Extension ها در خود IIS بصورت پیشفرض موجود هستند و برخی دیگر بایستی بر روی آن نصب شده و یا برای آن کدنویسی شوند. Extension ها را می توان به نوعی ماژول های IIS نیز عنوان کرد ، شما اگر بخواهید به قابلیت های IIS چیزی اضافه کنید ، برای IIS یک Extension جدید می نویسید.

ISAPI چیست ؟

در پاراگراف قبلی شما مفهوم یک Extension برای IIS را متوجه شدید ، اما قبل از اینکه برای شما ISAPI Extension را تشریح کنیم بهتر است بدانیم که ISAPI چیست ؟ کلمه ISAPI مخفف شده کلمه Internet Server Application Programming Interface است و در واقع یک نوع API است که به برنامه نویس ها اجازه توسعه و گسترش امکانات و قابلیت های موجود در وب سرور IIS را می دهد. ISAPI بصورت ویژه برای کارکردن و کاربرد در IIS طراحی شده است اما صرفا به این وب سرور محدود نمی شود و وب سرورهای دیگر نظیر Apache نیز برای اینکه بتوانند از نرم افزارهای کاربردی تحت وب نوشته شده به زبان ASP.NET پشتیبانی کنند از یک ماژول ISAPI استفاده می کنند.

وب سرور مایکروسافت یا همان IIS از مجموعه ای از زیر برنامه ها یا Sub-Application ها تشکیل شده است که بسیار بسیار قابل تنظیم و تغییر هستند. ASP.NET یکی از همین قسمت های IIS محسوب می شود که به یک برنامه نویس این اجازه را می دهد که بتواند نرم افزارهای کاربردی تحت وب یا وب سایت های خود را با زبان برنامه نویسی مورد علاقه خود ( VB.NET,C#,F# ) که به وسیله تکنولوژی Microsoft .NET پشتیبانی می شود بنویسند. اما این زبان های برنامه نویسی ، زبان های سطح بالا هستند . ISAPI یک سیستم برنامه نویسی بسیار سطح پایین تر از اینها می باشد که به برنامه نویس امکان کدنویسی کدهایی با کارایی و سرعت اجرا بالاتر و البته سادگی کمتر را می دهد. نرم افزارهایی که برای توسعه یا Extend کردن IIS مورد استفاده قرار میگیرند و در واقع به ISAPI Extension معروف هستند با زبان هایی مانند C و یا C++ نوشته می شوند.

 

نرم افزارهای کاربردی ISAPI یا ISAPI Applications

ISAPI از دو جزء تشکیل شده است ، Extensions و Filters . اینها تنها مواردی هستند که می توان یا استفاده از ISAPI Programming آنها را توسعه و برایشان کد نویسی کرد. هر یک از این دو مورد بایستی ابتدا در قالب یک فایل DLL برای ویندوز کامپایل شده و در وب سرور IIS ثبت یا Register شوند تا بتوان از آنها در IIS استفاده کرد.ISAPI Application ها را می توان با استفاده از هر زبان برنامه نویسی که بتوان از آن خروجی استاندارد توایع C را گرفت ، می توان برنامه نویسی کرد که در اینجا معمولا به زبانهای C و C++ و Delphi نوشته می شوند. یک سری کتابخانه یا Library در زبان های برنامه نویسی وجود دارند که امکانات ویژه ای برای برنامه نویس برای ISAPI ها قراهم کرده اند که از آن جمله می توان به Intraweb در Delphi اشاره کرد. باز هم تاکید میکنم که بحث ما در این مقاله برنامه نویسی برای ISAPI ها نیست بلکه صرفا می خواهیم دیدگاهی نسبت به این Extension در IIS داشته باشید.

 

ISAPI Extension در IIS چیست ؟

ISAPI Extensionها در واقع نرم افزارهایی هستند که بر روی IIS قرار دارند ، آنها به تمام فعالیت ها و کارکردها و امکاناتی که توسط IIS ارائه می شوند دسترسی کامل دارند . ISAPI Extension ها در قالب فایل های DLL بر روی IIS لود می شوند و در نهایت توسط خود وب سرور IIS کنترلر می شوند. کلاینت ها همانطور که به یک صفحه وب استاتیک HTML دسترسی پیدا می کنند می توانند به ISAPI Extension ها نیز دسترسی پیدا کنند. ISAPI Extension ها می توانند در قالب مدیریت کردن پسوند یک فایل در وب سرور ، یک پوشه در وب سرور و یا حتی یک سایت کامل در وب سرور بکارگیری شوند . ASP ، ASP.NET ، ColdFusion ، Perl ISAPI و PHP از نمونه ISAPI Extension های شناخته شده ای هستند که در IIS پشتیبانی می شوند.

 

ISAPI Filter ها در IIS چیست ؟

ISAPI Filter ها برای تغییر دادن و بالابردن کارایی فعالیت ها و سرویس های IIS استفاده می شوند. همانطور که از نام این نوع Extension مشخص است برای Filter کردن درخواست هایی که به وب سرور ارسال می شوند استفاده می شوند . آنها همیشه بر روی وب سرور IIS فعال هستند و تمامی درخواست ها را با توجه به قوانینی که برای آنها تعیین شده است Filter می کنند مگر اینکه درخواست مورد نظر نیازمند فرآیند پردازشی خاصی باشد. Filter ها به گونه ای برنامه نویسی می شوند که می توانند هم ترافیک ورودی و هم ترافیک خروجی را آزمایش و تغییر دهند. Filter ها در قالب فایل های DLL به IIS معرفی و در آن ثبت می شوند و IIS می تواند آنها در در دو سطح Site و Server اعمال کند . به سطح Server در اصطلاح Global Level هم گفته می شود و هر چیزی که در این سطح اعمال شود بر روی کلیه سایت های موجود بر روی سرور اعمال خواهد شد. Filter ها زمانی شروع به کار می کنند که یک Worker Process ایجاد شود و در همین لحظه شروع به گوش دادن به درخواست هایی که برای سایت ای که بر روی آن نصب شده است می کند. وظایف معمولی که توسط ISAPI Filter ها انجام می شود به شرح زیر است :

  • اعمال تغییرات در داده های درخواستی توسط کلاینت مثل URL ها و Header ها
  • کنترل کردن فایل فیزیکی که به آدرس URL متصل شده است
  • کنترل نام کاربری و رمز عبوری که توسط سیستم احراز هویت Basic یا Anonymous استفاده می شود
  • اعمال تغییرات و تجزیه و تحلیل درخواست بعد از اتمام فرآیند احراز هویت
  • اعمال تغییرات در پاسخی که به سمت کلاینت بازگردانی می شود
  • اجرای پردازش های دلخواه در خصوص پاسخ هایی که با Access Denied مواجه می شوند
  • اجرای پردازش در زمانی که درخواست کلاینت کامل می شود
  • اجرای پردازش در زمانی که ارتباط بین کلاینت با سرور بسته می شود
  • گرفتن لاگ های خاص و تجزیه و تحلیل ترافیک
  • انجام دادن ساختار احراز هویت دلخواه
  • مدیریت کردن ساختار رمزنگاری و فشرده سازی

 

ساختار کارکرد ISAPI Filter ها و ISAPI Extension ها چگونه است ؟

خوب برای اینکه ساختار کارکرد ایندو را به خوبی درک کنیم ابتدا به بررسی تفاوت بین ایندو می پردازیم . خوب در اولین مرحله این فرآیند یک کلاینت به وب سرور یک درخواست وب تحت شبکه ارسال می کند و این درخواست توسط Kernel Mode Listener یا همان Http Listener دریافت می شود. در اینجا Kernel Mode Listener بررسی می کند که درخواست دریافت شده اجازه استفاده از منابع کدامیک از وب سایت های موجود در IIS را دارد ، سپس بررسی می کند که در این وب سایت از کدامیک از Application pool های موجود و همچنین worker Process های فعال استفاده می شود و در نهایت درخواست رسیده از طرف کلاینت را در درون صف پردازشی Worker Process یا Process Queue قرار می دهد. خوب در این مرحله بعد از اینکه نوبت به پردازش این درخواست رسید ، Worker Process مورد نظر درخواست را دریافت کرده و در اینجاست که ISAPI Filter مربوطه به این درخواست در قالب یک فایل اجرایی شروع به کار می کند . خوب همانطور که اشاره شد Filter ها در IIS می توانند درخواست ها را دریافت و آنها را تغییر دهند ، برای مثال آنها می توانند چهره URL ها را عوض کنند و یا در برخی اوقات می توانند اطلاعات مربوط به Cookie های موجود در درخواست ها را تحلیل کرده و اطلاعات مورد نظر خود را از آن دریافت کنند. توجه کنید که در این مرحله هیچگونه پردازشی بر روی درخواست انجام نشده است و در واقع این یک مرحله قبل از انجام پردازش محسوب می شود . در واقع در اینجا filter ها یک مرور اولیه بر روی درخواست ها انجام می دهند.

خوب در اینجا توجه کنید که اگر درخواست کلاینت یک درخواست صفحه وب استاتیک باشد هیچگونه نیازی به انجام پردازش نیست و IIS می داند که درخواست را بایستی به کدامیک از وب سایت های موجود ارسال کند. اما اگر درخواست کلاینت برای وب سایت های داینامیک بود که با استفاده از زبان های PHP یا ASP نوشته شده اند و دارای Managed Code باشند ، در اینجاست که درخواست ها نیاز به پردازش دارند و درخواست به Extension ها ارسال می شود تا فرآیند پردازشی آنها انجام شود. خوب در اینجا فرض کنید که در URL آدرس دارای پسوند PHP می باشد ، در اینجا بعد از انجام عملیات اولیه توسط Filter ها درخواست به Extension ای که مربوط به پردازش پسوند های PHP است ارسال می شود و این Extension با توجه به دستوراتی که به آن داده اند پردازش را بایستی بر روی این درخواست انجام دهد . بعد از اینکه فرآیند پردازشی توسط Extension انجام شد ، درخواست مجددا به سمت IIS ارسال می شود و IIS نیز درخواست کلاینت را پاسخگویی می کند.ممکن است در یک فرآیند درخواست چندین Extension همزمان فراخوانی شوند و این کاملا به نوع فایلی که توسط کلاینت درخواست شده است بستگی دارد. برای مثال ممکن است در یک درخواست یک صفحه ASP.NET فراخوانی شود که نیاز به Compression و همچنین لاگ برداری دارد ، در این زمان سه Extension همزمان برای انجام این فرآیند فراخوانی می شوند ، جالب اینجاست که شما می توانید ترتیب اجرای این Extensions ها را برای IIS مشخص کنید ، این مورد برای Filter ها نیز صادق می باشد. نکته مهمی که بایستی در نظر داشته باشید این است که همیشه Filter ها با زبان ISAPI نوشته می شوند اما Extension ها می توانند به زبان های مختلفی از جمله CGI ، ISAPI یا Fast CGI نوشته شوند.

 

منظور از CGI و Fast CGI در Extension های IIS چیست ؟

CGI مخفف کلمه Common Gateway Interface است و یک استاندارد برای ایجاد نرم افزارهای تحت وب در قالب فایل های اجرایی می باشد. فایل هایی که با استفاده از این استاندارد تولید می شوند به CGI Scripts یا ساده تر بگوییم CGI ها معروف هستند که معمولا با یک زبان اسکریپت نویسی نوشته می شوند. وب سرورهایی که از CGI ها پشتیبانی می کنند می توانند URL ها را به گونه ای ترجمه کنند که در نهایت درخواست ها به یک اسکریپت CGI اجرایی ختم شود. اگر دقت کرده باشید در ریشه پوشه های وب سروهای لینوکسی پوشه ای به نام cgi-bin وجود دارد ، تمامی فایل های اجرایی که در قالب CGI هستند برای مسائل امنیتی در این پوشه قرار می گیرند . همانطور که اسکریپت های اجرایی می توانند کارها را سریعتر انجام دهند به همان اندازه نیز می توانند خطرناک باشند ، تصور کنید که با استفاد از همین دستورات اجرایی CGI یک اسکریپت مخرب در وب سرور فراخوانی و اجرا شود . CGI به همین دلایل و همچنین بوجود آمدن زبان های برنامه نویسی وب جدید و امنیت بیشتر این زبان ها کم کم از استفاده افتاد و هم اکنون استفاده چندانی از این تکنولوژی در وب سرورها نمی شود ، هر چند که با وجود Extension های مربوط به CGI در وب سرور IIS این قابلیت وجود دارد که شما بتوانید از این اسکریپت ها استفاده کنید . اما نسل بعدی CGI به نام Fast CGI می باشد که این Extension که برای IIS هم وجود دارد همانند اسمش سریعتر از CGI های معمولی اجرا می شوند و قطعا بار کاری کمتری را بر روی وب سرور قرار می دهد .

 

استفاده از Extension ها در IIS

تا اینجا در خصوص تئوری های مباحثی همچون Extension ها ، ISAPI ، Filter ، CGI و … صحبت کردیم ، اما این Extension ها و Filter ها در کجای وب سرور IIS قرار دارند و ما چگونه می توانیم به آنها دسترسی داشته و آنها را تغییر بدهیم ؟ همانطور که اشاره کردیم در این مقاله صرفا به موجودیت این موارد اشاره می کنیم و انجام هر گونه تغییرات اساسی در این خصوص نیازمند دانش فنی برنامه نویسی در این حیطه می باشد ، بنابراین صرفا به نمایش محل انجام تنظیمات آنها کفایت می کنیم . در تصویر پایین شما می توانید قسمت هایی همچون Modules ، ISAPI Filters ، ISAPI and CGI Restrictions ، CGI ، Handler Mappings ، Fast CGI Settings و ASP در کنسول وب سرور IIS مشاهده کنید .

 

نتیجه

در این مقاله به بررسی مفاهیمی مثل ISAPI ، Extension ، Filter ، CGI ، Fast CGI و … پرداختیم و کاملا با مفهوم آنها آشنایی پیدا کردیم ، در خصوص آموزش های فنی در این مبحث همانطور که اشاره شد ارتباط چندانی به بحث مدیریت وب سرور IIS ندارد و کاملا یک مبحث برنامه نویسی می باشد و به همین دلیل صرفا به محل قرار گیری آنها در IIS اشاره کردیم . در ادامه این سری مقالات با مفاهیم راه اندازی یک فایل سرور FTP آشنا خواهیم شد و به شما آموزش می دهیم که چگونه یک FTP Server بر روی وب سرور IIS راه اندازی کنید .