برنامه CGI — سیر تکاملی بهبود عملکرد وبسایتها
«واسط دروازه مشترک» (Common Gateway Interface) یا اصطلاحاً «CGI»، پروتکل استانداردی برای اجرای برنامهها در محیط «وب سرور» (Web Server) و تولید خروجی برای مرورگرهای وب است. به برنامههای مبتنی بر این پروتکل، اسکریپت یا برنامههای CGI گفته میشود. هنگامی که از طرف مرورگر کاربر، درخواستی مبنی بر دسترسی به یک آدرس اینترنتی (URL) خاص ارسال میشود، برنامه CGI به عنوان یک واسط و به نیابت از وبسرور، خروجیهای مورد نیاز را تولید میکند.
مزایای CGI
برنامههای CGI از عوامل اصلی پویایی و تعاملی بودن وب محسوب میشوند و محدودهی وسیعی از کارها مانند تائید اعتبار یک کاربر یا ایجاد یک اپلیکیشن خرید را میتوان به وسیله آنها انجام داد. استفاده از CGI، یک وبسایت را از جنبههای زیادی بهبود میبخشد. موارد زیر، از مزایای اصلی این برنامهها در بهبود تجربه کاربری هستند:
- قابلیت شخصیسازی بر اساس نوع کاربر: با استفاده از CGI، میتوان خروجیهای سفارشی را برای هر کاربر ایجاد کرد. به عنوان مثال، شاید شخصی بخواهد تراکنشهای حساب بانکی خود را بررسی کند. در این صورت، دادههای مورد نیاز از پایگاه داده بازیابی میشوند.
- قابلیت شخصیسازی بر اساس نوع سیستم: ممکن است کاربر از تلفن همراه خود برای دسترسی به وبسایت استفاده کند. به این ترتیب، خروجی با توجه به وضوح تلفن تنظیم خواهد شد.
- انجام بهروزرسانیها: یک بهروزرسانی، در نتیجه استفاده از متد «POST» در فرمهای HTML انجام میشود (در بخشهای بعدی توضیح داده خواهد شد). به عنوان مثال، شاید شما تمایل داشته باشید که وضعیت یا اصطلاحاً استاتوس شبکه اجتماعی خود را بهروزرسانی کنید.
- آپلود کردن فایلها: فایلی که توسط یک کاربر آپلود میشود به یک CGI در سرور نیاز دارد تا به درخواست آپلود رسیدگی و فایل را در یک محل خاص ذخیره کند.
- تولید خروجی: بسیاری از وبسایتها علاوه بر نمایش خروجی در مرورگر، فرمتهای دیگری مانند فایل ورد، پیدیاف و غیره را نیز ارائه میکنند. برخی از این خروجیها باید در حین اجرای فرآیند درخواست و بدون هیچ تأخیری یا اصطلاحاً به صورت «On The Fly»، توسط CGI ایجاد شوند. دریافت صورتحساب تلفن و گردشهای کارت اعتباری، از این موارد هستند.
سرو کردن (Serving) فایلهای ایستا در مقایسه با CGI
یک فایل HTML (همچنین فایلهای جاوااسکریپت و CSS)، مستقیماً توسط وب سرور «سرو» (Serve) میشود. در طرف دیگر، یک برنامه CGI، هنگامی از طریق وب سرور اجرا میشود که یک URL خاص درخواست شده باشد. برای انجام درخواستهایی که نیازمند دسترسی به اطلاعات پویا مانند اطلاعات موجود در پایگاه داده هستند، از CGI استفاده میشود.
به عنوان مثال، به منظور تائید اعتبار یک کاربر برای صدور مجوز دسترسی، نام کاربری و کلمه عبور در یک پایگاه داده ذخیره میشوند و جهت دسترسی به چنین اطلاعاتی، باید درخواستی مبنی بر تائید کاربر ارسال شود. برای رسیدگی به این درخواست، وب سرور یک برنامه CGI را اجرا میکند تا جستجو، بازیابی اطلاعات و تائید اعتبار کاربر را انجام دهد.
پیکربندی وب سرورها
یک وب سرور، نرمافزار HTTP سرور را به منظور ارائه قابلیت سرو کردن فایلهای HTML، به کار میگیرد و برنامههای CGI را برای ایجاد خروجی بدون تأخیر اجرا میکند. نرمافزار HTTP سرور، توسط مدیر وبسرور پیکربندی میشود تا در هنگام دریافت درخواستهای URL مطابق با الگوهای خاص، برنامههای بخصوصی اجرا شوند.
اجرای CGI
هنگامی که مرورگر یک کاربر، درخواستی را به یک URL خاص ارسال میکند، تمام اطلاعات به صورت «هدر» (Header) و احتمالاً بدنه HTTP فرستاده خواهند شد. برخی از این اطلاعات شامل موارد زیر میشوند:
- نوع مرورگر
- نام کاربر (در صورتی که کاربر وارد سیستم شده باشد)
- تمام کوکیهایی که پیش از این در وب سرور ذخیره شدهاند
- متغیرهای فرم (در صورتی که درخواست از نوع POST باشد)
هنگامی که یک برنامه CGI برای انجام درخواستی اجرا میشود، سرور تمام این اطلاعات را به برنامه انتقال خواهد داد. ممکن است که CGI، به منظور رسیدگی به درخواست، برخی از این اطلاعات یا تمام آنها را استفاده کند و با توجه به نوع کاربر، یک خروجی سفارشی ارائه دهد.
رسیدگی به فرمهای نوع POST
یکی از کاربردهای ابتدایی CGI، پردازش فرمهای HTML است. یک فرم HTML، به عنوان روشی برای ایجاد تعامل بین کاربر و سیستم، گزینههای زیادی را برای ارسال ورودی فراهم میکند. به عنوان مثال، در هنگام کلیک بر روی دکمه «ارسال اطلاعات» یا «Submit» در یک فرم، مرورگر، اطلاعات ورودی درون فرم را جمعآوری کرده و به URL مقصد میفرستد. معمولاً در این هنگام، وب سرور یک برنامه CGI را فراخوانی و سپس تمام ورودیهای جمعآوری شده کاربر را ارسال میکند. به چنین فعل و انفعالی، فرستادن داده توسط «POST» گفته میشود. این اصطلاح فنی، بیانگر روش یا «متد» (Method) ارسال محتوای فرم به CGI است. پس از دریافت فرم توسط CGI، محتوای آن پردازش و پاسخی مناسب به مرورگر بازگردانده میشود.
نمونهای از یک CGI
کد زیر، نمونهای از یک برنامه CGI نوشته شده در زبان برنامهنویسی پایتون است. این کد را میتوان در درون یک وب سرور قرار داد و با یک URL مشابه «http://www.example.com/cgi-bin/env.cgi»، به آن دسترسی پیدا کرد. CGI در هنگام فراخوانی این مسیر، تمام متغیرهای دریافتی از وب سرور را گزارش خواهد کرد. این مثال، سادهترین حالت یک برنامه CGI است.
#!/usr/bin/python import os print "Content-type: text/plain\n" for key in os.environ: print key, "=>\"", os.environ[key], "\""
سیر تکاملی CGI
تقریباً از زمان پیدایش وب، برنامههای CGI بخشی از وب سرورها بودهاند. «NCSA HTTPd»، به عنوان اولین وب سرور توسعه یافته در اینترنت، تنها از فایلهای ایستا پشتیبانی میکرد. پس از مدتی، مشخص شد که اجرای اسکریپت در پاسخ به درخواست URL، امکان ایجاد محتوای پویا را فراهم میکند. به این ترتیب، CGI به وجود آمد.
اولین برنامههای CGI، اسکریپتهای سادهای بودند که در زبانهایی مانند «پرل» (Perl)، «تیسیال» (TCL) و «شل» (Shell) نوشته میشدند. این برنامهها را میشد در زبانهای ترجمهشده یا کامپایلری از قبیل C و ++C هم نوشت اما در این صورت، به منظور کامپایل برنامه و ایجاد یک CGI قابل اجرا، به یک مرحلهی اضافی نیاز بود. با پیچیدهتر شدن CGI ها و افزایش تقاضای کاربران، مشخص شد که ایجاد فرآیندهای جداگانه CGI برای رسیدگی به هر درخواست، میزان سقف CPU و مموری مورد نیاز را بسیار زیاد میکند؛ مخصوصاً هنگامی که رسیدگی کلی به بخشهای مختلف یک درخواست، نسبت به ایجاد فرآیندهای جدید، زمان کمتری نیاز داشت.
در این هنگام، وب سرورها به استفاده از مفسرهای کامل اسکریپت روی آورند تا در بخش جداگانهای درون فرآیند وب سرور، به درخواستهای کاربران رسیدگی شود. این کار، راندمان سرویسدهی به درخواستها را بهبود بخشید و زمان پاسخ را کاهش داد. این مقوله، با ظهور زبانهای برنامهنویسی جدیدی همزمان شد که مخصوص کدنویسی وب طراحی شده بودند. یکی از این زبانها، «پیاچپی» (PHP) است. مفسر این زبان، کار خود را به عنوان یک برنامه CGI آغاز کرد. این مفسر، به عنوان بخشی از فرآیند پردازش درخواست، فایل درخواست شده را برای دستورات پیاچپی تحلیل کرده و دستورات را در همانجا اجرا میکند.
سخن آخر
استفاده از CGI، یک روش قدیمی در «اسکریپتنویسی سمت سرور» (Server-Side Scripting) محسوب میشود. امروزه می توان در بسیاری از وب سرورهای مدرن و با استفاده از زبانهایی مانند پرل، پیاچپی، «روبی» (Ruby) و غیره، اسکریپتنویسی را به صورت مستقیم و آنلاین، درون وب سرور انجام داد.
#